我有一些数据输入为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());

这是处理此问题的正确方法吗?还是我需要将每个timeWindowAllkeyBy等放入其自己的语句中?

最佳答案

DataStream API尚不支持多个聚合功能的链接。

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

关于java - flink : applying multiple aggregations on a windowed stream,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33486191/

10-09 22:52