首页 > 解决方案 > Dataflow/apache beam:管理自定义模块依赖项

问题描述

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

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

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

import myothermodule

当我在本地运行时DirectRuner,我没有问题。但是当我在数据流上运行它时DataflowRunner,我有一个错误告诉:

ImportError: No module named myothermodule

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

标签: pythongoogle-cloud-dataflowapache-beam

解决方案


当您远程运行管道时,您还需要在远程工作人员上提供任何依赖项。为此,您应该将模块文件放在 Python 包中,方法是将其放在带有__init__.py文件的目录中并创建 setup.py。它看起来像这样:

├── mymain.py
├── setup.py
└── othermodules
    ├── __init__.py
    └── myothermodule.py

并像这样导入它:

from othermodules import myothermodule

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

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

import setuptools

setuptools.setup(packages=setuptools.find_packages())

此处记录了整个设置。

可以在此处找到使用此功能的完整示例。


推荐阅读