我正在编写Beam管道,以在CSV集合上运行一些任意的Pandas代码。这需要使用比Dataflow随附的版本更高的Pandas('0.24.2')版本运行,出于方便,我在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]
当我尝试在Dataflow上运行此作业时,该作业挂起,按比例放大,但实际上未执行任何操作。最初我得到了错误:
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
参数传递该问题即可解决此问题。