Устранение ошибок импорта конвейерного пучка Apache [BoundedSource объект превышает допустимый предел]
У меня есть куча текстовых файлов (~1M), хранящихся в облачном хранилище Google. Когда я читаю эти файлы в конвейер Google Cloud DataFlow для обработки, я всегда получаю следующую ошибку:
Total size of the BoundedSource objects returned by BoundedSource.split() operation is larger than the allowable limit
Страница поиска неисправностей гласит:
Вы можете столкнуться с этой ошибкой, если вы читаете из очень большого количества файлов через TextIO, AvroIO или какой-либо другой файловый источник. Конкретное ограничение зависит от деталей вашего источника (например, встраивание схемы в AvroIO.Read позволит использовать меньше файлов), но оно составляет порядка десятков тысяч файлов в одном конвейере.
Означает ли это, что я должен разбивать свои файлы на меньшие партии, а не импортировать их все сразу?
Я использую поток данных Python SDK для разработки конвейеров.
1 ответ
Разбиение файлов на пакеты - разумный обходной путь - например, читать их, используя несколько преобразований ReadFromText или несколько конвейеров. Я думаю, что на уровне файлов 1M, первый подход не будет работать. Лучше использовать новую функцию:
Лучший способ прочитать очень большое количество файлов - использовать ReadAllFromText. Он не имеет ограничений по масштабируемости (хотя он будет работать хуже, если количество файлов очень мало).
Он будет доступен в Beam 2.2.0, но он уже доступен в HEAD, если вы хотите использовать сборку снимков.
См. Также Как улучшить производительность TextIO или AvroIO при чтении очень большого количества файлов? для версии Java.