2015-11-02 305 views
5

我有一些数据作为id,float,float,float进来。我想按顺序分别(),max()和sum()字段,并按ID值分组。flink:在窗口流上应用多个聚合

使用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()); 

这是处理这一正确的方法是什么?或者我是否需要将每个timeWindowAllkeyBy一起放入其自己的声明中?

回答

5

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

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