Устранение ошибок импорта конвейерного пучка 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.

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