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

时间:2015-11-02 20:24:39

标签: 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());

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

1 个答案:

答案 0 :(得分:5)

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

在您的示例中,您将创建三个不同的5秒窗口,每个窗口应用一个聚合。这可能不是你想要做的。我将实现一个自定义ReduceFunction,它在一个窗口中一次执行所有聚合。有关示例,请参阅DataStream documentation中的 Window Reduce