首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >默认窗口和默认触发器如何在apache波束中工作?

默认窗口和默认触发器如何在apache波束中工作?
EN

Stack Overflow用户
提问于 2019-10-09 09:43:16
回答 2查看 1.1K关注 0票数 1

我试图用默认触发器实现默认窗口,以评估行为,但它不会产生任何结果。

据阿帕奇·梁说:

-- PCollection的默认触发器是基于事件时间的,当波束的水印通过窗口的末端时,会发出窗口的结果,然后每次延迟数据到达时都会触发。

--如果您同时使用默认窗口配置和默认触发器,则默认触发器只发出一次,而延迟数据将被丢弃。这是因为默认的窗口配置允许延迟值为0。

我的代码:

代码语言:javascript
复制
Nb_items = lines | beam.CombineGlobally(beam.combiners.CountCombineFn()).without_defaults() \
                 | 'print' >> beam.ParDo(PrintFn())

只有在设置触发器时,它才会发出数据。

代码语言:javascript
复制
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。该项的值来自您在应用组合

时指定的组合函数中的累加器

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-09 16:55:05

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

正如纪尧姆正确地问的那样,如果你在批处理上运行,触发器基本上被忽略了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58301330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档