开发者社区> 问答> 正文

如何在时间窗口内获取最新值

这就是我的流数据:

timeidgroup
1a1b1
2a1b2
3a1b3
4a2b3

在我们的窗口中考虑上面的所有示例 我的用例获取最新的独特ID。

我需要输出如下:

timeidgroup
3a1b3
4a2b3

我怎样才能在Flink中实现这一目标?

我知道窗口功能WindowFunction。但是,我无法绕过这样做。

我试过这只是为了获得不同的ID。如何将此功能扩展到我的用例?

class DistinctGrid extends WindowFunction[UserMessage, String, Tuple, TimeWindow] {
override def apply(key: Tuple, window: TimeWindow, input: Iterable[UserMessage], out: Collector[String]): Unit = {

val distinctGeo = input.map(_.id).toSet
for (i <- distinctGeo) {
  out.collect(i)
}

}
}

展开
收起
flink小助手 2018-12-10 10:29:46 1806 0
1 条回答
写回答
取消 提交回答
  • flink小助手会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关flink的问题及回答。

    如果您通过id字段键入流,则无需考虑不同的ID - 您将为每个不同的键设置单独的窗口。您的窗口函数只需迭代窗口内容以查找具有最大时间戳的UserMessage,并将其作为窗口的结果输出(对于该键)。但是,有一个内置函数可以做到这一点 - 查看maxBy()的文档 - 因此在这种情况下不需要窗口函数。

    粗略地说,这看起来像

    stream.keyBy("id")
    .timeWindow(Time.minutes(10))
    .maxBy("time")
    .print()

    2019-07-17 23:19:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
用计算和数据去改变整个世界 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载