是否有一个包含多个文件的 Python Dataflow Flex 模板示例,其中脚本导入同一文件夹中包含的其他文件?
我的项目结构是这样的:
├── pipeline
│ ├── __init__.py
│ ├── main.py
│ ├── setup.py
│ ├── custom.py
我正在尝试将 custom.py 导入到 main.py 中作为数据流 Flex 模板。
我在管道执行中收到以下错误:
ModuleNotFoundError: No module named 'custom'
如果我将所有代码包含在一个文件中并且不进行任何导入,则管道工作正常。
Dockerfile 示例:
FROM gcr.io/dataflow-templates-base/python3-template-launcher-base
ARG WORKDIR=/dataflow/template/pipeline
RUN mkdir -p ${WORKDIR}
WORKDIR ${WORKDIR}
COPY pipeline /dataflow/template/pipeline
COPY spec/python_command_spec.json /dataflow/template/
ENV DATAFLOW_PYTHON_COMMAND_SPEC /dataflow/template/python_command_spec.json
RUN pip install avro-python3 pyarrow==0.11.1 apache-beam[gcp]==2.24.0
ENV FLEX_TEMPLATE_PYTHON_SETUP_FILE="${WORKDIR}/setup.py"
ENV FLEX_TEMPLATE_PYTHON_PY_FILE="${WORKDIR}/main.py"
Python 规范文件:
{
"pyFile":"/dataflow/template/pipeline/main.py"
}
我使用以下命令部署模板:
gcloud builds submit --project=${PROJECT} --tag ${TARGET_GCR_IMAGE} .
我实际上通过向模板执行传递一个附加参数 setup_file 来解决这个问题。还需要添加setup_file
模板元数据的参数
--parameters setup_file="/dataflow/template/pipeline/setup.py"
显然是命令ENV FLEX_TEMPLATE_PYTHON_SETUP_FILE="${WORKDIR}/setup.py"
Dockerfile 中的内容毫无用处,实际上并没有获取安装文件。
我的安装文件如下所示:
import setuptools
setuptools.setup(
packages=setuptools.find_packages(),
install_requires=[
'apache-beam[gcp]==2.24.0'
],
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)