一些反应式框架具有groupByUntil
功能。允许按键对元素进行分组,并在特定事件或时间间隔后将其删除(即此处的RxJS描述)。
正如我所看到的,apache-flink并没有开箱即用的功能。有人能解释一下如何在apacheflink中实现这样的功能吗?
你看了Flink的时间窗口吗?窗口用于对流的元素进行分组,例如按时间和键。
您可以如下定义翻滚时间窗口:
val s: DataStream[(Int, Long)] = ...
val r: DataStream[(Int,Long)] = s
.keyBy(_._1)
.timeWindow(Time.minutes(5))
.minBy(2)
这将把流划分为第一个Int
元素(__1),并每五分钟为每个键创建一个窗口来对元素进行分组。在每个窗口上,应用minBy
函数来选择具有最小Long
值的元素。
您还可以定义滑动窗口、计数窗口,或者使用触发器和驱逐器实现您自己的窗口逻辑。窗口评估函数(示例中为minBy
)也可以是自定义实现。
您应该查看DataStream文档以了解更多详细信息。