flink:在窗口流上应用多个聚合
flink: applying multiple aggregations on a windowed stream
我有一些数据作为 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
等放在自己的语句中?
DataStream API 尚不支持链接多个聚合函数。
在您的示例中,您创建了三个不同的 5 秒 windows,每个应用一个聚合。这可能不是您想要做的。我将实现一个自定义 ReduceFunction
,在单个 window 中一次执行所有聚合。有关示例,请参见 DataStream documentation 中的 Window Reduce。
我有一些数据作为 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
等放在自己的语句中?
DataStream API 尚不支持链接多个聚合函数。
在您的示例中,您创建了三个不同的 5 秒 windows,每个应用一个聚合。这可能不是您想要做的。我将实现一个自定义 ReduceFunction
,在单个 window 中一次执行所有聚合。有关示例,请参见 DataStream documentation 中的 Window Reduce。