Apache Beam-多次使用GroupByKey后,Windows / Triggers会发生什么?

时间:2019-05-29 21:58:35

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

Beam编程模型指南的窗口部分显示了 ParDo之后在GroupyByKey转换中定义和使用的窗口。 (section 7.1.1)。

窗口在元素范围内保留多长时间?

让我们想象一下这样的管道:

my_pcollection = p | MySourceOfData()

results_pcoll = (my_pcollection
                 | beam.WindowInto(..., triggering=...)
                 | beam.GroupByKey()
                 | beam.ParDo(DoSomeFormattingFn())
                 | beam.Combine.Globally(sum))

假设第一个窗口是通过键聚合的,但是在 您可能要在第二个窗口中组合所有键中的元素。

results_pcoll的外观如何?会开窗吗?会按键吗?

1 个答案:

答案 0 :(得分:0)

在Beam中,重要的是要记住每个元素都有与之关联的窗口

在代码段中,my_pcollection中的元素与全局窗口相关联。当您添加beam.WindowInto时,您正在为每个元素添加一个窗口-当它们进入GroupByKey时,元素将按分组:键和窗口


当您向下游访问ParDoCombine时,元素继续具有相同的窗口,并且相同的触发器

之所以会发生这种情况,是因为Beam试图允许您的数据继续流过管道,因此它保持相同的窗口并触发语义。


基于这些考虑,您的results_pcoll将具有与在管道开始时添加的窗口和触发器相同的语义。

通过全局合并,您将对所有键进行一次汇总,但对于每个窗口,您也将进行一次汇总。