全文转自:https://blog.csdn.net/wangpei1949/article/details/102986845
Window Function在窗口触发后,负责对窗口内的元素进行计算。Window Function分为两类: 增量聚合和全量聚合。
增量聚合: 窗口不维护原始数据,只维护中间结果,每次基于中间结果和增量数据进行聚合。如: ReduceFunction、AggregateFunction。
全量聚合: 窗口需要维护全部原始数据,窗口触发进行全量聚合。如:ProcessWindowFunction。
本文总结增量聚合函数(ReduceFunction、AggregateFunction)和全量聚合函数(ProcessWindowFunction)的使用。
注意:
FoldFunction也是增量聚合函数,但在Flink 1.9.0中已被标为过时(可用AggregateFunction代替),这里不做总结。
WindowFunction也是全量聚合函数,已被更高级的ProcessWindowFunction逐渐代替,这里也不做总结。
ReduceFunction输入输出元素类型相同。
增量聚合
ReduceFunction
1 | // 测试数据: 某个用户在某个时刻浏览了某个商品,以及商品的价值 |
AggregateFunction
1 | // 测试数据: 某个用户在某个时刻浏览了某个商品,以及商品的价值 |
全量聚合
1 | // 测试数据: 某个用户在某个时刻浏览了某个商品,以及商品的价值 |
ProcessWindowFunction与增量聚合结合
1、可将ProcessWindowFunction与增量聚合函数ReduceFunction、AggregateFunction结合。
2、元素到达窗口时增量聚合,当窗口关闭时对增量聚合的结果用ProcessWindowFunction再进行全量聚合。
3、既可以增量聚合,也可以访问窗口的元数据信息(如开始结束时间、状态等)。
ProcessWindowFunction与ReduceFunction结合
1 | // 测试数据: 某个用户在某个时刻浏览了某个商品,以及商品的价值 |
ProcessWindowFunction与AggregateFunction结合
1 | // 测试数据: 某个用户在某个时刻浏览了某个商品,以及商品的价值 |