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

mee*_*mee 5 python google-cloud-dataflow apache-beam

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

??? mymain.py
??? myothermodule.py
Run Code Online (Sandbox Code Playgroud)

我将myothermodule.py导入mymain.py中,如下所示:

import myothermodule
Run Code Online (Sandbox Code Playgroud)

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

ImportError: No module named myothermodule
Run Code Online (Sandbox Code Playgroud)

因此,我想知道在数据流上运行作业时是否希望找到该模块该怎么办?

ril*_*lla 5

远程运行管道时,还需要使远程工作者上的所有依赖项都可用。为此,您应该通过将模块文件放入包含__init__.py文件的目录中并创建setup.py 来将模块文件放入Python包中。它看起来像这样:

??? mymain.py
??? setup.py
??? othermodules
    ??? __init__.py
    ??? myothermodule.py
Run Code Online (Sandbox Code Playgroud)

然后像这样导入它:

from othermodules import myothermodule
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用命令行选项运行管道 --setup_file ./setup.py

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

import setuptools

setuptools.setup(packages=setuptools.find_packages())
Run Code Online (Sandbox Code Playgroud)

整个设置记录在这里

一个完整的例子可以在这里找到。