【问题标题】:How to pass requirements.txt parameter in Dataflow when Dataflow is being triggered by Cloud Function?Cloud Function触发Dataflow时如何在Dataflow中传递requirements.txt参数?
【发布时间】:2020-07-18 18:50:59
【问题描述】:

Objective- 我有一个依赖于 pandas 和 nltk 的数据流模板 (用 python 编写) 我也想从云函数触发数据流作业。为此,我已将代码上传到存储桶,并准备在云函数中指定模板位置。

问题-当您使用云端功能的发现 google 模块触发数据流作业时,如何传递您通常会传递以安装任何第三方库的 requirements_file 参数?

先决条件-我知道这可以通过指定本地目录路径通过本地计算机启动作业时完成,但是当我尝试从 GCS 指定路径时,例如 --requirements_file gs://bucket/requirements.txt 它给我一个错误说:

找不到文件 gs://bucket/requirements.txt。它是在 --requirements_file 命令行选项中指定的。

【问题讨论】:

  • 您是否按照平时通过gcloud functions deploy 的方式部署了 Google Cloud 功能?看看here 这是一个快速入门并展示了如何指定依赖项。
  • 是的,它提到了 google-cloud-function 而不是 google-dataflow 的 requirements.txt,不是吗?
  • 好吧,那我有点糊涂了。所以你有一个谷歌云函数,你想用它来触发一个云数据流管道,对吗?这个函数看起来怎么样?
  • 我刚想问,如果你通过gcloud dataflow jobs run触发它会起作用吗?

标签: python google-cloud-platform google-cloud-dataflow


【解决方案1】:

数据流模板不是 python 或 java 代码,而是您用 python 或 java 编写的代码的编译版本。因此,当您创建模板时,您可以像往常一样在参数中传递 requirements.txt,如下所示

python dataflow-using-cf.py \
    --runner DataflowRunner \
    --project <PROJECT_ID> \
    --staging_location gs://<BUCKET_NAME>/staging \
    --temp_location gs://<BUCKET_NAME>/temp \
    --template_location ./template1 \
    --requirements_file ./requirements.txt \

上述命令将创建一个名为 template1 的文件,如果您阅读该文件,该文件包含一个 JSON 结构,该文件是您编写的 Dataflow 代码的编译版本,在编译过程中,它将读取您的requirements.txt 从您的本地目录中编译它的步骤。然后您可以将您的模板添加到存储桶并提供云函数的路径,您不必担心创建模板后的requirements.txt 文件。

【讨论】:

  • 谢谢,我正在为此苦苦挣扎。现在它正在工作。
猜你喜欢
  • 2018-08-29
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多