Считать файл по порядку в Google Cloud Dataflow
Я использую Spotify Scio для чтения журналов, которые экспортируются из Stackdriver в Google Cloud Storage. Это файлы JSON, где каждая строка представляет собой одну запись. Глядя на рабочие журналы, кажется, что файл разбит на куски, которые затем читаются в любом порядке. Я уже ограничил свою работу ровно 1 работником в этом случае. Есть ли способ заставить эти куски быть прочитанными и обработанными по порядку?
В качестве примера (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 по порядку. Я обнаружил, что сжатие файла и чтение его с указанным CompressionType - это обходной путь, но мне интересно, есть ли какие-либо способы сделать это, не включая архивирование или изменение исходного файла.
1 ответ
Облачный поток данных Google / Apache Beam в настоящее время не поддерживают сортировку или сохранение порядка при обработке конвейеров. Недостаток учета отсортированного вывода состоит в том, что он выводит такой результат для больших наборов данных, что в конечном итоге приводит к появлению узких мест на одной машине, что невозможно масштабировать для больших наборов данных.