代码之家  ›  专栏  ›  技术社区  ›  xudesheng

如何在Flink reduce计算中得到当前窗口前的最后一个值

  •  0
  • xudesheng  · 技术社区  · 8 年前

    时间戳,值

    12:55:00, 10

    13:30:00, 14

    现在,我的时间窗口是13:00(含)~14:00(不含),如何得到最后一个值,即12:55:00,10,作为当前窗口计算的初始值?

    谢谢。

    1 回复  |  直到 8 年前
        1
  •  0
  •   David Anderson    8 年前

    一般来说,有两种方法可以实现这一点:

    1. 某种自定义窗口
    2. 改用ProcessFunction

    考虑到WindowAPI的设计方式,在使用预聚合(即reduce或aggregate)时,我看不到任何方法可以实现这一点,但我认为可以使用ProcessWindowFunction和自定义逐出器,或者利用ProcessWindowFunction.Context中的globalState在一个窗口和下一个窗口之间保持状态。

    您可能遇到的一个问题是,例如,如果在13:00~14:00这一小时内没有发生任何事件,则不会创建或计算任何窗口。如果这是一个问题,那么需要进一步定制。

    在大多数涉及非标准窗口的情况下,使用ProcessFunction更直接、更高效。这样,您就可以直接控制要保持的状态,而窗口触发逻辑通常不太难重新创建。