2015-11-02 71 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