flink:在窗口流上应用多个聚合
问题描述:
我有一些数据作为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());
这是处理这一正确的方法是什么?或者我是否需要将每个timeWindowAll
与keyBy
一起放入其自己的声明中?
答
DataStream API不支持链接多个聚合函数。
在您的示例中,您将创建三个不同的5秒钟窗口,每个窗口应用一次聚合。这可能不是你想要做的。我将实现一个自定义ReduceFunction
,它可以在一个窗口中一次执行所有聚合。例如,参见窗口减少的DataStream documentation。