Java Flink keyby然后window然后聚合所有结果?
以下是我想在Apache Flink中做的事情: 获取一个输入Java Flink keyby然后window然后聚合所有结果?,java,apache-flink,Java,Apache Flink,以下是我想在Apache Flink中做的事情: 获取一个输入DataStream,然后按字段键入x,然后执行15分钟滑动窗口,每分钟滑动一次,聚合每个键(x)的结果,然后将所有这些聚合聚合聚合聚合到一个列表中 基本上,如果我有一个输入流,[(a,1,时间1),(b,6,时间14),(b,1,时间12)],我希望结果是[(a,1),(b,7)],通过操作15分钟的滑动窗口和这个特定的滑动窗口 这可能吗?是的,确实可能。Flink的窗口API允许您使用非关键帧窗口跟踪关键帧窗口。来自ApacheF
DataStream
,然后按字段键入x
,然后执行15分钟滑动窗口,每分钟滑动一次,聚合每个键(x
)的结果,然后将所有这些聚合聚合聚合聚合到一个列表中
基本上,如果我有一个输入流,[(a,1,时间1),(b,6,时间14),(b,1,时间12)]
,我希望结果是[(a,1),(b,7)]
,通过操作15分钟的滑动窗口和这个特定的滑动窗口
这可能吗?是的,确实可能。Flink的窗口API允许您使用非关键帧窗口跟踪关键帧窗口。来自ApacheFlink培训站点的内容涵盖了这种模式。此外,请在有关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())
您可能更愿意使用ReduceFunction
或AggregateFunction
来代替WindowProcessFunctions
,或者在WindowProcessFunctions
之外使用
您会注意到,timewindow操作符生成的事件具有反映窗口本身时间边界的时间戳,而不是与落在窗口中的事件的时间戳有关。但是这些事件确实有时间戳,而且流仍然带有水印——因此再次进行时间戳分配是没有意义的。(同样值得注意的是,已设置关键帧的窗口生成的流不再设置关键帧。)谢谢。我就是这么做的。您对
apply
功能有何想法?应该使用它吗?感谢您的另一个评论,在第一个过程
函数之后,我的对象的时间戳会发生变化。Flink是如何处理这个问题的?我应该再次进行时间戳分配吗?如果您也不介意回答,有没有办法让第一个窗口从窗口中第一个事件的时间戳的层开始所有
?没有任何理由使用应用
<代码>进程
更有用,因为它提供了一个上下文对象,其中包含窗口函数
无法使用的信息。窗口始终与历元对齐——它们不能与第一个事件的时间对齐。