Python 仅在另一个管道在google数据流上完成后执行管道

Python 仅在另一个管道在google数据流上完成后执行管道,python,google-cloud-dataflow,apache-beam,Python,Google Cloud Dataflow,Apache Beam,我想在google数据流上运行一个管道,它依赖于另一个管道的输出。现在,我正在使用DirectRunner本地运行两条管道: with beam.Pipeline(options=pipeline_options) as p: (p | beam.io.ReadFromText(known_args.input) | SomeTransform() | beam.io.WriteToText('temp')) with beam.Pipeline(opti

我想在google数据流上运行一个管道,它依赖于另一个管道的输出。现在,我正在使用DirectRunner本地运行两条管道:

with beam.Pipeline(options=pipeline_options) as p:
    (p
     | beam.io.ReadFromText(known_args.input)
     | SomeTransform()
     | beam.io.WriteToText('temp'))

with beam.Pipeline(options=pipeline_options) as p:
    (p
     | beam.io.ReadFromText('temp*')
     | AnotherTransform()
     | beam.io.WriteToText(known_args.output))
我的问题如下:

  • DataflowRunner是否保证第二个管道仅在第一个管道完成后启动
  • 是否有一种首选的方法,使两条管道在彼此之后连续运行
  • 还有没有推荐的方法将这些管道分离到不同的文件中,以便更好地测试它们
DataflowRunner是否保证第二个管道仅在第一个管道完成后启动

不,数据流只是执行一个管道。它没有用于管理依赖管道执行的功能

更新:为了澄清,Apache Beam确实提供了一种等待管道完成执行的机制。请参见
PipelineResult
类的
waitUntilFinish()
方法。参考文献:

是否有一种首选的方法,使两条管道在彼此之后连续运行

考虑使用Apache Airflow之类的工具来管理依赖管道。您甚至可以实现一个简单的bash脚本来在一个管道完成后部署另一个管道

还有没有推荐的方法将这些管道分离到不同的文件中,以便更好地测试它们


是的,单独的文件。这只是一个很好的代码组织,对于测试来说并不一定更好。

您的第一点并不完全正确。的确,数据流本身并不管理管道依赖关系,但它确实提供了一个API来等待管道完成,管道对象上的“with”语句使用该API。@jkff,是的,这是正确的。Apache Beam Java SDK中的
PipelineResult
类有一个方法
waitUntilFinish()
。python呢?