如何使用Apache Beam创建滚动窗口?不是滑动或固定的,而是滚动的窗口

时间:2019-02-20 17:41:52

标签: apache-beam stream-processing apache-beam-io windowing event-stream-processing

说,我想计算每分钟后最近10分钟内某个指标的平均值,并将其与每分钟后最近20分钟内相同指标的平均值进行比较。我需要2个窗口(不是10个滑动窗口与20个滑动窗口)或2个固定持续时间的窗口,并且要早点触发。我需要2个窗口,该窗口应每分钟向前滚动一分钟(持续时间分别为10分钟和20分钟)。或者,如果我可以丢弃除最近的所有滑动窗口,则可以解决我的问题。否则,多个滑动窗口会非常昂贵。

能在这里帮忙吗?自定义WindowFn()函数将非常有帮助

1 个答案:

答案 0 :(得分:1)

我必须更新最终完成的工作。 我创建了一个Global Window,其AllowedLateness为1小时,并使用“累积窗格”永久地重复触发每一分钟。在此全局窗口中,我对最近10分钟(当前Instant.minus 10分钟)中带有时间戳的元素应用了DoFn过滤,以及最近20分钟(Present Instant.minus 20分钟)中具有事件的元素进行了DoFn过滤,以创建2个不同的PCollections。我这次应用了两次过滤-一次在全局窗口的触发器输出中将其添加到PCollection中,持续10分钟,20分钟,然后再次在集合本身中删除所有不再属于时间的部分持续时间。目前,这两个PCollection作为滚动窗口,但是我需要审核结果以确认是否确实有效。