Skip to main content
 首页 » 编程设计

python之管道代码跨越 Apache Beam/Dataflow 中的多个文件

2025年01月19日36TianFang

经过长时间的搜索,我没有找到跨多个文件的 Dataflow/Beam 管道的示例。 Beam 文档做 suggest a file structure (在“多个文件依赖项”部分下),但他们提供的 Juliaset 示例实际上有效 a single code/source文件(以及调用它的 main file)。基于 Juliaset 示例,我需要一个类似的文件结构:

juliaset/__init__.py 
juliaset/juliaset.py # actual code 
juliaset/some_conf.py 
__init__.py 
juliaset_main.py 
setup.py 

现在我想从 juliaset/juliaset.pyimport .some_conf,它在本地运行时有效,但在 Dataflow 上运行时出错

INFO:root:2017-12-15T17:34:09.333Z: JOB_MESSAGE_ERROR: (8cdf3e226105b90a): Traceback (most recent call last): 
  File "/usr/local/lib/python2.7/dist-packages/dataflow_worker/batchworker.py", line 706, in run 
    self._load_main_session(self.local_staging_directory) 
  File "/usr/local/lib/python2.7/dist-packages/dataflow_worker/batchworker.py", line 446, in _load_main_session 
    pickler.load_session(session_file) 
  File "/usr/local/lib/python2.7/dist-packages/apache_beam/internal/pickler.py", line 247, in load_session 
    return dill.load_session(file_path) 
  File "/usr/local/lib/python2.7/dist-packages/dill/dill.py", line 363, in load_session 
    module = unpickler.load() 
  File "/usr/lib/python2.7/pickle.py", line 858, in load 
    dispatch[key](self) 
  File "/usr/lib/python2.7/pickle.py", line 1133, in load_reduce 
    value = func(*args) 
  File "/usr/local/lib/python2.7/dist-packages/dill/dill.py", line 767, in _import_module 
    return getattr(__import__(module, None, None, [obj]), obj) 
ImportError: No module named package_name.juliaset.some_conf 

非常感谢一个完整的工作示例!

请您参考如下方法:

您能否验证您的 setup.py 包含如下结构:

import setuptools 
 
setuptools.setup( 
    name='My Project', 
    version='1.0', 
    install_requires=[], 
    packages=setuptools.find_packages(), 
) 

导入您的模块,如 from juliaset.juliaset import SomeClass

当您调用 Python 脚本时,使用 python -m juliaset_main(不带 .py)

不确定您是否已经尝试过,但只是为了确定。