Когда вы заранее знаете, что шаблон файла, считываемый с помощью TextIO
или AvroIO
, будет расширяться до большого количества файлов, вы можете использовать недавно добавленная функция .withHintMatchesManyFiles()
, которая в настоящее время реализована на TextIO
и AvroIO
.
Например:
PCollection<String> lines = p.apply(TextIO.read()
.from("gs://some-bucket/many/files/*")
.withHintMatchesManyFiles());
Использование этой подсказки приводит к тому, что преобразования выполняются способом, оптимизированным для чтения большого количества файлов: количество файлов, которые можно прочитать в этом случае, практически неограничено, и, скорее всего, конвейер будет работать быстрее, дешевле и надежнее, чем без него. этот намек.
Однако он может работать хуже, чем без подсказки, если шаблон файла на самом деле соответствует лишь небольшому количеству файлов (например, нескольким дюжинам или нескольким сотням файлов).
Под капотом эта подсказка заставляет преобразования выполняться соответственно через TextIO.readAll()
или AvroIO.readAll()
, которые являются более гибкими и масштабируемыми версиями read()
, которые позволяют читать PCollection<String>
шаблонов файлов (где каждый String
является шаблоном файла), с той же оговоркой: если общее количество файлов, соответствующих файловым шаблонам, невелико, они могут работать хуже, чем простой read()
с файловым шаблоном, указанным во время построения конвейера.
person
jkff
schedule
27.07.2017