使用 python 运行 gcp 数据流管道时出现 ModuleNotFoundError 消息

问题描述 投票:0回答:1

我正在尝试在数据流管道中安装依赖项。首先我使用了requirements_file标志,但我得到了(ModuleNotFoundError:没有名为“unidecode”的模块[运行“Map(wordcleanfn)-ptransform-54”时]) 添加的唯一包是 unidecode。 尝试第二个选项,我按照谷歌文档配置了 Docker 映像:

FROM apache/beam_python3.10_sdk:2.52.0

ENV RUN_PYTHON_SDK_IN_DEFAULT_ENVIRONMENT=1

RUN pip install unidecode

RUN apt-get update && apt-get install -y

ENTRYPOINT ["/opt/apache/beam/boot"]

它在gcp项目vm中编译并推送到artifactregistry 然后我生成了管道模板:

python -m mytestcode \
    --project myprojectid \
    --region us-central1 \
    --temp_location gs://mybucket/beam_test/tmp/ \
    --runner DataflowRunner \
    --staging_location gs://mybucket/beam_test/stage_output/ \
    --template_name mytestcode_template \
    --customvariable 500 \
    --experiments use_runner_v2 \
    --sdk_container_image us-central1-docker.pkg.dev/myprojectid/myimagerepo/dataflowtest-image:0.0.1 \
    --sdk_location container

毕竟我使用 UI 从模板创建了作业,但错误是相同的,请问有人可以帮助我吗? 据我所知,工作人员正在使用默认的beam sdk,这是正确的吗?我该如何解决它?

python docker google-cloud-platform google-cloud-dataflow beam
1个回答
0
投票

如果您在代码顶部全局声明它,您将收到此错误。例如,假设您正在 ParDo 函数内执行 unidecode 库操作。如果是这种情况,请使用 ParDo 函数内的 import 语句,而不是在代码的第一行中导入它。

就我而言,我在 ParDo 函数中使用日期时间库。所以我在 ParDo 函数中导入了日期时间库

class sample_function(beam.DoFn):
def process(self, element):
    from datetime import datetime
   
© www.soinside.com 2019 - 2024. All rights reserved.