PTransform на стороне ввода приводит к предупреждению и плохой производительностиPython

Программы на Python
Гость
PTransform на стороне ввода приводит к предупреждению и плохой производительности

Сообщение Гость »


Я хотел бы применить преобразование к боковой входной PCollection с помощью Apache Beam. Преобразование побочного ввода должно выполняться для каждого элемента базовой PCollection, а сведения о преобразованиях считываются из соответствующего элемента. В некоторой степени это работает, но вызывает следующее предупреждение для каждого элемента PCollection base_data:

ПРЕДУПРЕЖДЕНИЕ:apache_beam.options.pipeline_options:Отбрасывание неразбираемых аргументов: ['test.py'] (test.py — это имя моего скрипта Python)

Что еще более важно, применение преобразования к боковой входной PCollection внутри преобразования приводит к значительному падению производительности.

Вот минимальный пример, вызывающий такое поведение:

# Использование Python 3.10.9 и Apache Beam 2.44.0 импортировать apache_beam как луч тест класса (beam.DoFn): процесс определения (я, элемент, боковой_вход): # Это PTransform боковой_вход | луч.Фильтр(лямбда _: Истина) элемент доходности с лучом.Pipeline() в качестве конвейера: base_data = конвейер | 'Создать данные' >> луч.Создать([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) Side_input = конвейер | 'Создать тестовые данные' >> Beam.Create([1, 2]) выход = ( базовые_данные | луч.ParDo(Test(),side_input=beam.pvalue.AsIter(side_input)) | луч.Карта(распечатать) ) В этом примере преобразование в классе Test ничего не делает, но все равно вызывает рассматриваемое поведение. Выполнение этого примера уже занимает больше секунды, а без этого (очень простого) бокового преобразования ввода он завершается мгновенно. Реальный конвейер, над которым я работаю, конечно, более сложен и занимает очень много времени (>1 минуты), хотя применяемые преобразования очень просты и применяются к PCollection, состоящему всего из 39 элементов.

Мне хотелось бы знать, является ли применение преобразования к побочному входу внутри преобразования просто не тем, что вам следует делать, или я просто делаю это неправильно.

Спасибо!

Вернуться в «Python»