flink:在窗口流上应用多个聚合

eth*_*nny 5 java apache-flink

我有一些数据以id,float,float,float形式出现.我想按顺序min(),max()和sum()字段,并按id值分组.

使用flatMap我有一个Tuple4的位,但我不知道如何将它发送到下一步.

是)我有的:

dataStream.flatMap(new mapper()).keyBy(0)  
   .timeWindowAll(Time.of(5, TimeUnit.SECONDS)).min(1)  
   .timeWindowAll(Time.of(5, TimeUnit.SECONDS)).sum(2)
   .timeWindowAll(Time.of(5, TimeUnit.SECONDS)).sum(3)
   .map(new printstuff());
Run Code Online (Sandbox Code Playgroud)

这是处理这个问题的正确方法吗?或者我是否需要将每个timeWindowAll声明放在自己的声明中keyBy等等?

Fab*_*ske 6

DataStream API尚不支持链接多个聚合函数.

在您的示例中,您将创建三个不同的5秒窗口,每个窗口应用一个聚合.这可能不是你想要做的.我将实现一个自定义ReduceFunction,在一个窗口中一次执行所有聚合.见窗口减少的数据流中文档的一个例子.