某些反应框架具有groupByUntil
功能。允许按键对元素进行分组,并在特定事件或时间间隔后删除它(即来自RxJS的here描述)。
我可以看到apache-flink没有开箱即用的功能。谁能解释一下如何在apache-flink中实现这样的功能?
答案 0 :(得分:1)
你看过Flink的时间窗吗? Windows用于对流的元素进行分组,例如按时间和密钥。
您可以按如下方式定义翻滚时间窗口:
val s: DataStream[(Int, Long)] = ...
val r: DataStream[(Int,Long)] = s
.keyBy(_._1)
.timeWindow(Time.minutes(5))
.minBy(2)
这会将流分区为第一个Int
元素(_._ 1),并且每隔五分钟创建一个窗口,用于为每个键分组元素。在每个窗口上,应用minBy
函数来选择具有最小Long
值的元素。
您还可以使用Triggers和Evictors定义滑动窗口,计算窗口或实现自己的窗口逻辑。窗口评估函数(示例中为minBy
)也可以是自定义实现。
您应该查看DataStream documentation了解详情。