我正在使用Flink 1.6 timeWindow。假设我有以下数据点:
时间戳,值
12:55:00,10
13:05:00,12
13:30:00,14
13:59:00,13
14:02:00,17
现在,我的时间窗口是13:00(含)〜14:00(不含),如何获取最后一个值(即12:55:00,10)作为当前Window计算的初始值? / p>
谢谢。
答案 0 :(得分:0)
广义上讲,有两种方法可以解决此问题:
考虑到窗口API的设计方式,在使用预聚合(即减少或聚合)时,我看不到任何实现此目的的方法,但是我认为您可以使用ProcessWindowFunction和自定义Evictor来做一些事情,或者利用ProcessWindowFunction.Context中的globalState来保持一个窗口与下一个窗口之间的状态。
您可能会遇到的一个问题是,例如,如果在13:00到14:00之间没有事件发生,那么将不会创建或评估任何窗口。如果有问题,则需要进一步的自定义。
在大多数情况下,涉及到非标准窗口,使用ProcessFunction更直接,更高效。这样,您可以直接控制要保留的状态,并且通常很难重新创建窗口触发逻辑。