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.