默认窗口和默认触发器如何在 apache beam中工作



我正在尝试使用默认触发器实现默认窗口来评估行为,但它没有发出任何结果。

根据Apache Beam的说法:

PCollection 的默认触发器基于事件时间,并且 当光束的水印通过 窗口结束,然后在每次延迟数据到达时触发。


如果您同时使用默认窗口配置和 默认触发器,默认触发器只发出一次,而且很晚 数据将被丢弃。这是因为默认窗口配置 允许的迟到值为 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 使用默认的全局窗口,默认行为是返回 包含一项的电脑。该项目的值来自 应用时指定的组合函数中的累加器 合

当前的问题是水印永远不会到达GlobalWindow的末尾。 要获得默认触发器,您可以使用水印可以到达末尾的任何其他窗口,例如:'window' >> beam.WindowInto(window.FixedWindows(10))

正如纪尧姆正确问的那样,如果你在 Batch 上运行,触发器基本上会被忽略。

请参阅以下来源:

https://github.com/apache/beam/blob/828b897a2439437d483b1bd7f2a04871f077bde0/examples/java/src/main/java/org/apache/beam/examples/complete/game/LeaderBoard.java#L274

有关 Google Cloud Dataflow 的更多信息

https://stackoverflow.com/a/54151029/12149235

相关内容

  • 没有找到相关文章