钥匙窗上的燧石褶皱



处理一些我想每15秒对其进行一次折叠的数据。从"外部"看,窗口似乎保存了持续时间内的所有数据,然后一次将其提交给折叠函数。

真相?

如果是这样的话,是否有一种方法可以在每次提交新数据时调用fold函数,然后在窗口结束时只返回结果

是否有其他转换组合可以实现这种效果?

您的观察是正确的。原因是当前窗口运算符的实现有些有限。从概念上讲,窗口运算符中有两个元素:窗口缓冲区窗函数。假设窗口运算符的输入类型为IN,输出类型为OUT。现在,窗口缓冲区存储类型为IN的元素,当需要发射元素时,它会发射类型为IN的元素。窗口函数获得元素IN的集合作为输入,并发射类型为OUTCollection[IN] -> OUT)的元素。

如果窗口函数是reduce函数,我们可以在窗口缓冲区内预聚合,因为它的签名是(IN, IN) -> IN。窗口函数基本上只从窗口缓冲区中获取一个可以发出的元素。

如果我们想要一个有效的折叠,事情会变得稍微复杂一些,因为我们需要窗口缓冲区来获取类型为IN但发出类型为OUT的元素,并且窗口函数看起来像这样:OUT -> OUT

这是可能的,但现在还没有实现。(顺便说一句,我为此开了一期Jira:https://issues.apache.org/jira/browse/FLINK-2991)

相关内容

  • 没有找到相关文章