flink - 在键控上折叠 windows
flink - folds on keyed windows
处理一些我想每 15 秒执行一次折叠的数据。从 'outside' 看来,window 正在保存持续时间内的所有数据,然后一次性将其提交给折叠函数。
真相?
如果是这样,有没有办法在每次提交新数据时调用 fold 函数,然后 只在 结束时返回结果 window?
是否有一些其他的转换组合可以放在一起来实现这种效果?
你的观察是正确的,是的。原因是 windowing 运算符的当前实现有些受限。从概念上讲,window 运算符中有两个元素:window 缓冲区 和 window 函数 .假设 window 运算符的输入类型是 IN
,输出类型是 OUT
。现在,window 缓冲区存储 IN
类型的元素,当需要发出元素时,它会发出 IN
类型的元素。 window 函数获取元素集合 IN
作为输入并发出类型 OUT
(Collection[IN] -> OUT
).
的元素
如果 window 函数是一个 reduce 函数,我们可以在 window 缓冲区内进行预聚合,因为它的签名是 (IN, IN) -> IN
。 window 函数基本上只从它可以发出的 window 缓冲区中获取一个元素。
如果我们想要一个高效的折叠,事情会变得稍微复杂一些,因为我们需要 window 缓冲区来获取类型 IN
的元素,但发出类型 OUT
和 window 函数看起来像这样:OUT -> OUT
.
可以做到,但现在还没有实现。 (顺便说一句,我为此开了一个Jira Issue:https://issues.apache.org/jira/browse/FLINK-2991)
处理一些我想每 15 秒执行一次折叠的数据。从 'outside' 看来,window 正在保存持续时间内的所有数据,然后一次性将其提交给折叠函数。
真相?
如果是这样,有没有办法在每次提交新数据时调用 fold 函数,然后 只在 结束时返回结果 window?
是否有一些其他的转换组合可以放在一起来实现这种效果?
你的观察是正确的,是的。原因是 windowing 运算符的当前实现有些受限。从概念上讲,window 运算符中有两个元素:window 缓冲区 和 window 函数 .假设 window 运算符的输入类型是 IN
,输出类型是 OUT
。现在,window 缓冲区存储 IN
类型的元素,当需要发出元素时,它会发出 IN
类型的元素。 window 函数获取元素集合 IN
作为输入并发出类型 OUT
(Collection[IN] -> OUT
).
如果 window 函数是一个 reduce 函数,我们可以在 window 缓冲区内进行预聚合,因为它的签名是 (IN, IN) -> IN
。 window 函数基本上只从它可以发出的 window 缓冲区中获取一个元素。
如果我们想要一个高效的折叠,事情会变得稍微复杂一些,因为我们需要 window 缓冲区来获取类型 IN
的元素,但发出类型 OUT
和 window 函数看起来像这样:OUT -> OUT
.
可以做到,但现在还没有实现。 (顺便说一句,我为此开了一个Jira Issue:https://issues.apache.org/jira/browse/FLINK-2991)