是否可以在没有本地所有依赖项的情况下运行/序列化Dataflow作业?

时间:2019-09-27 12:22:47

标签: python google-cloud-dataflow apache-beam

我已经使用Apache Beam为Google Cloud Dataflow创建了管道,但是我不能在本地拥有Python依赖项。但是,这些依赖项可以远程安装没有问题。

在不执行本地(开发)环境中的Python代码的情况下,是否可以运行作业或创建模板?

2 个答案:

答案 0 :(得分:0)

看看这个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帐户和凭据。

答案 1 :(得分:0)

好吧,我不是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

我从来没有尝试过,但是它可能会起作用:)