TextIO.Read().From() против TextIO.ReadFiles() поверх withHintMatchesManyFiles()

В моем случае получения набора подходящих файловых шаблонов от Kafka,

PCollection<String> filepatterns = p.apply(KafkaIO.read()...);

Здесь каждый шаблон может соответствовать до 300+ файлов.

Q1. Как я могу использоватьTextIO.Read() чтобы сопоставить данные из PCollection, как withHintMatchesManyFiles() доступно только для TextIO.Read() не для TextIO.ReadFiles().

Q2. Если используется путь через FileIO.Match->FileIO.ReadMatch()->TextIO.ReadFiles(),withHintMatchesManyFiles() недоступен в этом пути, как это повлияет на производительность чтения?

Q3. Есть ли другой оптимизированный путь для вышеуказанного варианта использования?

2 ответа

Решение

Да не может быть withHintMatchesManyFiles() с TextIO.ReadFiles()из коробки. Фактически,TextIO.Read().withHintMatchesManyFiles() реализуется через FileIO трансформирует + TextIO.ReadFiles()(см. подробности). Этим способом,FileIO.readMatches() должен распределять читаемые файлы по рабочим.

Итак, я думаю, вы можете использовать тот же подход при чтении имен файлов из темы Kafka.

Как я могу использовать TextIO.Read() для сопоставления данных из PCollection, как withHintMatchesManyFiles(), доступный только для TextIO.Read(), а не для TextIO.ReadFiles().

Мое очень ограниченное понимание Apache Beam в целом и PTransforms в частности заключается в том, что TextIO.read()создает корневой PTransform, который можно использовать только в самом начале конвейера. Другими словами,TextIO.Read не может использоваться после любого вида PTransform.

Другие вопросы по тегам