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
的外观如何?会开窗吗?会按键吗?
答案 0 :(得分:0)
在Beam中,重要的是要记住每个元素都有与之关联的窗口。
在代码段中,my_pcollection
中的元素与全局窗口相关联。当您添加beam.WindowInto
时,您正在为每个元素添加一个窗口-当它们进入GroupByKey
时,元素将按分组:键和窗口
当您向下游访问ParDo
和Combine
时,元素继续具有相同的窗口,并且相同的触发器
之所以会发生这种情况,是因为Beam试图允许您的数据继续流过管道,因此它保持相同的窗口并触发语义。
基于这些考虑,您的results_pcoll
将具有与在管道开始时添加的窗口和触发器相同的语义。
通过全局合并,您将对所有键进行一次汇总,但对于每个窗口,您也将进行一次汇总。