0

Я использую Spotify Scio для чтения журналов, которые экспортируются из Stackdriver в Google Cloud Storage. Это файлы JSON, в которых каждая строка является отдельной записью. Глядя на рабочие журналы, кажется, что файл разбит на куски, которые затем читаются в любом порядке. В этом случае я уже ограничил свою работу ровно 1 работником. Есть ли способ заставить эти куски читать и обрабатывать по порядку?Прочитать файл в заказе в Google Cloud Dataflow

В качестве примера (Textfile в основном TextIO.Read):

val sc = ScioContext(myOptions) 
sc.textFile(myFile).map(line => logger.info(line)) 

производят ли вывод, подобный этому на основе рабочих журналов:

line 5 
line 6 
line 7 
line 8 
<Some other work> 
line 1 
line 2 
line 3 
line 4 
<Some other work> 
line 9 
line 10 
line 11 
line 12 

То, что я хочу знать, если есть способ заставить его читать строки 1-12 по порядку. Я обнаружил, что gzipping файл и чтение его с указанным параметром CompressionType - это обходной путь, но мне интересно, есть ли способы сделать это, которые не включают в себя zipping или изменение исходного файла.

+1

У меня была аналогичная проблема/вопрос в последнее время, и обратная связь была в основном «Нет». Кажется, что даже когда вы запускаете локально, Dataflow по-прежнему читает в случайном порядке. Одним из обходных решений, которые я выполнил для этого, что не очень удобно, является чтение файла по порядку в Pub/Sub и отправка сообщений в Dataflow, при этом Dataflow подписывается на тему PubSub вместо чтения файла. Когда DataFlow заканчивается с каждым сообщением, он отправляет сообщение обратно, говоря, что это сделано, поэтому PubSub отправляет следующий. Это немного за борт, так что было бы здорово услышать лучшие/встроенные параметры ... –

+0

Это неудачно, я думал о том, чтобы делать подобные вещи, но я могу просто предварительно застегнуть все, поскольку он по крайней мере кажется надежным. Если я правильно понимаю, расщепление не произойдет, когда они застегнуты на молнию, и логика продолжит порядок. Я согласен, что должен быть более простой способ, спасибо! –

+1

Не могли бы вы рассказать о своем случае? Dataflow предназначен для параллельной обработки данных, и похоже, что вы ищете серийный инструмент. –

ответ

4

Google Cloud Dataflow/Apache Beam в настоящее время не поддерживают сортировку или сохранение порядка обработки технологических трубопроводов. Недостатком разрешенного вывода является то, что он выводит такой результат для больших наборов данных в конечном итоге узкие места на одной машине, которая не масштабируется для больших наборов данных.

Смежные вопросы