Python 在Apache Beam管道中对一个PCollection同时应用多个PTTransforms
我正在尝试创建一个梁管道,以便在一个PCollection上同时应用多个ParDo变换,并在列表中收集和打印所有结果。到目前为止,我经历了一个循序渐进的过程,比如第一次帕多,然后第二次帕多。 以下是我为本期准备的一个示例:Python 在Apache Beam管道中对一个PCollection同时应用多个PTTransforms,python,apache-beam,Python,Apache Beam,我正在尝试创建一个梁管道,以便在一个PCollection上同时应用多个ParDo变换,并在列表中收集和打印所有结果。到目前为止,我经历了一个循序渐进的过程,比如第一次帕多,然后第二次帕多。 以下是我为本期准备的一个示例: import apache_beam as beam from apache_beam.options.pipeline_options import PipelineOptions p = beam.Pipeline(options=PipelineOptions())
import apache_beam as beam
from apache_beam.options.pipeline_options import PipelineOptions
p = beam.Pipeline(options=PipelineOptions())
class Tr1(beam.DoFn):
def process(self, number):
number = number + 1
yield number
class Tr2(beam.DoFn):
def process(self, number):
number = number + 2
yield number
def pipeline_test():
numbers = p | "Create" >> beam.Create([1])
tr1 = numbers | "Tr1" >> beam.ParDo(Tr1())
tr2 = numbers | "Tr2" >> beam.ParDo(Tr2())
tr1 | "Print1" >> beam.Map(print)
tr2 | "Print2" >> beam.Map(print)
def main(argv):
del argv
pipeline_test()
result = p.run()
result.wait_until_finish()
if __name__ == '__main__':
app.run(main)
转换和元素的调度由用于运行管道的运行程序管理 运行程序通常会尝试优化图形,并且可能会按顺序或并行运行某些任务 在您的例子中,Tr1和Tr2都是无状态的,并且应用于相同的输入。在这种情况下,runner通常在同一台机器上为相同的元素顺序运行它们。 注意,runner仍将并行运行不同的元素 应该是这样的 线程1 ele1->Tr1 ->Tr2 线程2 ele1->Tr1 ->Tr2
我不建议依赖管道不同部分的预期并行性,因为它取决于运行程序。您能在看到PTTransforms按顺序运行的地方附上数据流作业的图表吗?