Google cloud platform 默认窗口和默认触发器在apache beam中如何工作
我试图用默认触发器实现默认窗口来评估行为,但它没有发出任何结果 根据Apache Beam: PCollection的默认触发器基于事件时间,并且 当光束的水印通过窗口时,发射窗口的结果 窗口结束,然后在每次延迟数据到达时激发Google cloud platform 默认窗口和默认触发器在apache beam中如何工作,google-cloud-platform,google-cloud-dataflow,apache-beam,windowing,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,Windowing,我试图用默认触发器实现默认窗口来评估行为,但它没有发出任何结果 根据Apache Beam: PCollection的默认触发器基于事件时间,并且 当光束的水印通过窗口时,发射窗口的结果 窗口结束,然后在每次延迟数据到达时激发 如果同时使用默认窗口配置和 默认触发器,默认触发器只发出一次,并且延迟 数据被丢弃。这是因为默认的窗口配置 允许的延迟值为0 我的代码: Nb_items = lines | beam.CombineGlobally(beam.combiners.CountCombin
如果同时使用默认窗口配置和 默认触发器,默认触发器只发出一次,并且延迟 数据被丢弃。这是因为默认的窗口配置 允许的延迟值为0 我的代码:
Nb_items = lines | beam.CombineGlobally(beam.combiners.CountCombineFn()).without_defaults() \
| 'print' >> beam.ParDo(PrintFn())
只有我设置了触发器,它才会发出数据
Nb_items = lines | 'window' >> beam.WindowInto(window.GlobalWindows(),
trigger=trigger.AfterProcessingTime(10),
accumulation_mode=trigger.AccumulationMode.DISCARDING) \
| 'CountGlobally' >> beam.CombineGlobally(beam.combiners.CountCombineFn()).without_defaults() \
| 'print' >> beam.ParDo(PrintFn())
如何在不设置触发器的情况下观察默认行为
联合变换中是否存在问题
如果您的输入PCollection
使用默认全局窗口,默认行为是返回
包含一个项目的PCollection。该项的值来自
应用时指定的联合收割机功能中的累加器
结合
见以下资料来源:
有关谷歌云数据流的更多信息
当前的问题是水印永远不会到达
全局窗口的末尾。要使用默认触发器,您可以使用水印可以到达终点的任何其他窗口,例如:'window'>>beam.WindowInto(window.FixedWindows(10))
正如纪尧姆正确地问的那样,如果你在批处理上运行,触发器基本上被忽略。你在流处理中吗?是的,但在某一时刻我得到了所有数据。另一种说法是,在批处理中,水印最终前进到+无穷大,全局窗口完成,但在流媒体中,水印通常与实时有一些相似之处,永远不会达到+无穷大。