flink - 在钥匙窗上折叠

时间:2015-11-09 19:07:05

标签: java apache-flink

使用我想要每15秒执行折叠的一些数据。来自'外面'它看起来好像窗口持有持续时间内的所有数据,然后一次性将其提交给fold函数。

的真实?

如果是这样,有没有办法在每次提交新数据时都调用fold函数,然后只是结果在窗口结束时返回?

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

1 个答案:

答案 0 :(得分:2)

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

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

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

可以这样做,但它现在没有以这种方式实现。 (顺便说一句,我为此开了一个Jira问题:https://issues.apache.org/jira/browse/FLINK-2991