gpt4 book ai didi

java - Flink keyby 然后 window 然后聚合所有结果?

转载 作者:行者123 更新时间:2023-11-30 05:47:35 25 4
gpt4 key购买 nike

这是我想在 Apache Flink 中执行的操作:

输入DataStream<T>然后按字段键 x然后做一个每分钟滑动一次的 15 分钟窗口,聚合每个键的结果 ( x ),然后将所有这些聚合聚合到一个列表中

基本上,如果我有一个输入流,[(a, 1, Time 1), (b, 6, Time 14), (b, 1, Time 12)] ,我希望结果是 [(a, 1), (b, 7)] ,通过在 15 分钟滑动窗口上操作并针对此特定滑动窗口。

这可能吗?

最佳答案

是的,这确实是可能的。 Flink 的窗口 API 允许您使用非键控窗口跟踪键控窗口。 This exercise来自 Apache Flink 培训网站的内容涵盖了这种模式。另外,请在 this page in the documentation 上有关 Windows 的“惊喜”列表中查找标题为“Windows 可以跟随 Windows”的部分。 .

大致上,您将执行以下操作:

stream
.keyBy(e -> e.x)
.timeWindow(Time.minutes(15), Time.minutes(1))
.process(new ProduceKeyedResults())
.timeWindowAll(Time.minutes(15), Time.minutes(1))
.process(new ProduceOverallResults())

您可能更愿意使用 ReduceFunctionAggregateFunction 来代替 WindowProcessFunctions 或作为其补充。

您会注意到,时间窗口运算符生成的事件具有反射(reflect)窗口本身时间边界的时间戳,而不是与落入窗口的事件的时间戳有关。但事件确实有时间戳,并且流仍然带有水印——因此再次进行时间戳分配是没有意义的。 (还值得注意的是,由键控窗口生成的流不再是键控的。)

关于java - Flink keyby 然后 window 然后聚合所有结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54577863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com