【发布时间】:2019-09-28 00:35:34
【问题描述】:
我已经使用 Apache Beam 为 Google Cloud Dataflow 创建了一个管道,但我无法在本地拥有 Python 依赖项。但是,远程安装这些依赖项没有问题。
是否可以在我的本地(开发)环境中运行作业或创建模板而不执行 Python 代码?
【问题讨论】:
标签: python google-cloud-dataflow apache-beam
我已经使用 Apache Beam 为 Google Cloud Dataflow 创建了一个管道,但我无法在本地拥有 Python 依赖项。但是,远程安装这些依赖项没有问题。
是否可以在我的本地(开发)环境中运行作业或创建模板而不执行 Python 代码?
【问题讨论】:
标签: python google-cloud-dataflow apache-beam
看看这个tutorial。基本上,你编写 python 管道,然后通过命令行部署它
python your_pipeline.py \
--project $YOUR_GCP_PROJECT \
--runner DataflowRunner \
--temp_location $WORK_DIR/beam-temp \
--setup_file ./setup.py \
--work-dir $WORK_DIR
关键部分是 --runner DataflowRunner,因此它使用 Google Dataflow(而不是您的本地安装)来运行管道。显然,您必须设置您的 Google 帐户和凭据。
【讨论】:
gs://your-bucket/whatever.py 在这种情况下,我认为它根本不会使用您的本地环境。
好吧,我不能 100% 确定这是可能的,但你可以:
requirements.txt 文件,其中包含管道执行的所有依赖项因此,例如,您的文件可能如下所示:
import apache_beam as beam
with beam.Pipeline(...) as p:
result = (p | ReadSomeData(...)
| beam.ParDo(MyForbiddenDependencyDoFn()))
在同一个文件中,您的 DoFn 将从管道执行时代码中导入您的依赖项,例如 process 方法。见:
class MyForbiddenDependencyDoFn(beam.DoFn):
def process(self, element):
import forbidden_dependency as fd
yield fd.totally_cool_operation(element)
当你执行你的管道时,你可以这样做:
python your_pipeline.py \
--project $GCP_PROJECT \
--runner DataflowRunner \
--temp_location $GCS_LOCATION/temp \
--requirements_file=requirements.txt
我从未尝试过,但它可能会起作用:)
【讨论】: