Google cloud dataflow Apache Beam-在多个GroupByKey之后,Windows/触发器会发生什么情况?

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()

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

一个窗口在一个元素的作用域中保留多长时间

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

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
将具有与您在管道开头添加的相同的窗口和相同的触发器语义

通过全局组合,您将在所有键上有一个聚合,但每个窗口也有一个聚合