Я пишу конвейер Beam для запуска произвольного кода Pandas в коллекции CSV. Это должно выполняться с использованием более поздней версии Pandas ('0.24.2'), чем версия, которая поставляется в Dataflow, и для удобства я использую это на Python 3.6 вместо 3.5.
Это работает при работе с использованием Direct Runner, но не работает при работе с DataFlow.
Вот пример конвейера:
https://gist.github.com/mayansalama/b5756493f478a99224cd5c51ca4304e9
Я могу запустить это с прямым бегуном без проблем:
python pipeline.py --infile-pattern gs://[test_bucket]/csv_tests/ --output-table [PROJECT]:[DATASET].[TABLE_NAME]
Когда я пытаюсь запустить это в потоке данных, это задание зависает, масштабируется, но фактически ничего не делает. Изначально я получил ошибку:
AttributeError: Can't get attribute 'PandifyCSV' on <module 'dataflow_worker.start' from '/usr/local/lib/python3.5/site-packages/dataflow_worker/start.py'>
Однако с save_main_session это больше не проблема:
python pipeline.py --infile-pattern gs://[test_bucket]/csv_tests/ \
--output-table [PROJECT]:[DATASET].[TABLE_NAME] \
--requirements_file requirements.txt \
--runner DataflowRunner \
--project im-dev-219022 \
--temp_location gs://test_bucket_im_dev/tmp/ \
--experiment ignore_py3_minor_version \
--save_main_session
Я попробую сегодня вечером запустить py3.5 без опции ignore_py3_minor_version.
Есть идеи?
РЕДАКТИРОВАТЬ: Я получил это работает, эта проблема передавала панд через --requirements_file
. Выполнение pip download pandas==0.24.2
и передача его с использованием аргумента --extra_package
решило эту проблему.