我试图用默认触发器实现默认窗口,以评估行为,但它不会产生任何结果。
据阿帕奇·梁说:
-- 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使用默认的全局窗口,默认行为是返回包含一个项的PCollection。该项的值来自您在应用组合
时指定的组合函数中的累加器
发布于 2019-10-09 16:55:05
当前的问题是水印永远不会到达GlobalWindow的末尾。若要具有默认触发器,可以使用水印到达末端的任何其他窗口,例如:'window' >> beam.WindowInto(window.FixedWindows(10))
正如纪尧姆正确地问的那样,如果你在批处理上运行,触发器基本上被忽略了。
发布于 2019-10-09 09:48:18
https://stackoverflow.com/questions/58301330
复制相似问题