Google cloud dataflow Apache Beam-在多个GroupByKey之后,Windows/触发器会发生什么情况?
梁编程模型指南的窗口部分显示了 在ParDo之后的GroupyByKey转换中定义和使用的窗口。 () 一个窗口在一个元素的作用域中保留多长时间 让我们想象一下这样的管道:Google cloud dataflow Apache Beam-在多个GroupByKey之后,Windows/触发器会发生什么情况?,google-cloud-dataflow,apache-beam,apache-beam-io,Google Cloud Dataflow,Apache Beam,Apache Beam Io,梁编程模型指南的窗口部分显示了 在ParDo之后的GroupyByKey转换中定义和使用的窗口。 () 一个窗口在一个元素的作用域中保留多长时间 让我们想象一下这样的管道: my_pcollection = p | MySourceOfData() results_pcoll = (my_pcollection | beam.WindowInto(..., triggering=...) | beam.GroupByKey()
my_pcollection = p | MySourceOfData()
results_pcoll = (my_pcollection
| beam.WindowInto(..., triggering=...)
| beam.GroupByKey()
| beam.ParDo(DoSomeFormattingFn())
| beam.Combine.Globally(sum))
假设第一个窗口按键聚合,但在
第二个窗口,您可能希望在所有关键点上组合元素
结果\u pcoll
会是什么样子?它会开窗吗?是否为每个键?在Beam中,重要的是要记住每个元素都有一个与其关联的窗口
在代码段中,my\u pcollection
中的元素与全局窗口关联。将beam.WindowInto
添加到每个元素时,就是在为每个元素添加一个窗口-当它们进入GroupByKey
时,元素将同时按键和窗进行分组
当您向下游移动到一个
ParDo
和一个Combine
时,元素继续具有相同的窗口,并且具有相同的触发器
之所以会出现这种情况,是因为Beam试图允许数据继续流经管道,因此它保持了相同的窗口和触发器语义
考虑到这些因素,您的
结果\u pcoll
将具有与您在管道开头添加的相同的窗口和相同的触发器语义
通过全局组合,您将在所有键上有一个聚合,但每个窗口也有一个聚合