Google DataFlow/Python:在 __main__ 中使用 save_main_session 和自定义模块导入错误

kpa*_*pax 5 python google-cloud-dataflow apache-beam

有人可以澄清在使用save_main_session和自定义模块时的预期行为吗__main__?我的 DataFlow 管道导入 2 个非标准模块 - 一个通过requirements.txt,另一个通过setup_file。除非我将导入移动到使用它们的函数中,否则我会不断收到导入/酸洗错误。示例错误如下。从文档中,我认为设置save_main_session将有助于解决此问题,但事实并非如此(请参阅下面的错误)。所以我想知道我是否错过了什么,或者这种行为是故意的。放入函数时,相同的导入工作正常。

错误:

  find_class 中的文件“/usr/lib/python2.7/pickle.py”,第 1130 行
    __import__(模块)
导入错误:没有名为 jmespath 的模块

Ale*_*lex 6

https://cloud.google.com/dataflow/faq#how-do-i-handle-nameerrors https://beam.apache.org/documentation/sdks/python-pipeline-dependencies/

何时使用--save_main_session

您可以将--save_main_session管道选项设置为True. 这将导致全局命名空间的状态被腌制并加载到 Cloud Dataflow 工作线程上

最适合我的设置是dataflow_launcher.py与您的setup.py. 它唯一能做的就是导入您的管道文件并启动它。使用setup.py来处理所有的依赖关系。这是迄今为止我发现的最好的例子。

https://github.com/apache/beam/tree/master/sdks/python/apache_beam/examples/complete/juliaset