Как прочитать текстовый файл и вернуть дополнительное поле ввода с помощью TextIO? - PullRequest
0 голосов
/ 01 марта 2019

У меня есть PCollection KV, где ключ - это имя файла, а значение - некоторая дополнительная информация о файлах (например, системы «Source», которые генерировали файлы).Например,

KV("gs://bucket1/dir1/X1.dat", "SourceX"),
KV("gs://bucket1/dir2/Y1.dat", "SourceY")

Мне нужно прочитать все строки из файлов и с полем «Источник», возвращая как KV PCollection.

KV(line1 from X1.dat, "SourceX")
KV(line2 from X1.dat, "SourceX")
...
KV(line1 from Y1.dat, "SourceY")

Мне удалось добиться этого, вызвав FileIO.match (), а затем DoFn, в котором я последовательно читаю файл и добавляю SourceX (полученный из карты, переданной в SideInput).

Чтобы получить выгоду от параллельного чтения, могу ли я использовать TextIO.readAll () для достижения этой цели?TextIO.read () возвращает PCollection без информации об имени файла.Как я могу присоединиться к ней обратно на карте Filename to Source mapping?Пробовал передачу с помощью клавиш, но не работает ...

1 Ответ

0 голосов
/ 09 марта 2019

Если я правильно понимаю, вы хотите прочитать файл параллельно?К сожалению, TextIO.readAll не имеет этой функции.Вам нужно будет использовать FileIO.match, а затем написать DoFn, чтобы прочитать файл произвольным образом.

Это потому, что вы не сможете выполнить случайный поиск в файлеи сохранить количество номеров строк.

Является ли последовательное чтение файлов узким местом для вашего конвейера?

...