首页 > 解决方案 > 在 Apache Beam 中添加 2 Dofn 之间的依赖关系

问题描述

有什么方法可以在 2 个 Dofn 之间创建依赖关系,以便它等待第一个 Dofn 方法完成然后运行第二个 Dofn 方法。只是想知道我们如何实现这个用例。

标签: google-cloud-dataflowapache-beam

解决方案


可能有一种更清洁的方法可以做到这一点,但我注意到执行以下操作将达到您想要的效果:

将第一个 DoFn 的输出路由到一个计数器,然后将该计数器的输出作为侧面输入传递到第二个 DoFn 的 ParDo

class DoFn2(apache_beam.DoFn):
    def process(self, element, count_do_fn_1_output, *args, **kwargs):
        # ...

do_fn_1_output = do_fn_1_input | 'do fn 1' >> apache_beam.ParDo(DoFn1())

count_do_fn_1_output = (
    do_fn_1_output 
    | 'count do_fn_1_output' >> apache_beam.combiners.Count.Globally())

do_fn_2_output = (
    do_fn_1_output 
    | 'do fn 2' >> apache_beam.ParDo(DoFn2(), count_do_fn_1_output=apache_beam.pvalue.AsSingleton(count_do_fn_1_output)))

推荐阅读