数据流/ Apache Beam:管理自定义模块依赖性

时间:2018-08-09 09:27:05

标签: python google-cloud-dataflow apache-beam

我有一个使用apache Beam的.py管道,该管道导入了另一个模块(.py),这是我的自定义模块。 我有一个像这样的结构:

├── mymain.py
└── myothermodule.py

我这样在mymain.py中导入myothermodule.py:

import myothermodule

当我在DirectRuner上本地运行时,我没有问题。 但是,当我使用DataflowRunner在数据流上运行它时,出现错误消息:

ImportError: No module named myothermodule

所以我想知道如果我想在数据流上运行作业时希望找到该模块怎么办?

1 个答案:

答案 0 :(得分:3)

在远程运行管道时,还需要使任何依赖项在远程工作器上也可用。 为此,您应该将模块文件放入Python包中,方法是将其放在包含├── mymain.py ├── setup.py └── othermodules ├── __init__.py └── myothermodule.py 文件的目录中并创建setup.py。看起来像这样:

from othermodules import myothermodule

并像这样导入它:

--setup_file ./setup.py

然后,您可以使用命令行选项import setuptools setuptools.setup(packages=setuptools.find_packages())

运行管道

最小的setup.py文件如下所示:

{{1}}

整个设置记录在here中。

here中提供了使用该示例的完整示例。