说明
一个完整的窗口操作,要指定 window ,还要指定 function
function 表示最终的目的,比如:
- 找出这个窗口中的最大值
.window(...) .max(1); // 窗口函数 - 统计这个窗口中的和
.window(...) .sum(1); // 窗口函数
分类
增量聚合函数(incremental aggregation functions)
全量窗口函数(全窗口函数)(ful window functions)
增量聚合函数
每来一个数据就计算,保持一个简单的状态
ReduceFunction
将传入的两个元素,并返回同类型的元素,常用分组数据处理
flink已经提供 常见的 统计 求和、最大值 等,所以这类函数 一般不需要自己实现
AggregateFunction
是 ReduceFunction 的通用版本
全量窗口函数(全窗口函数)
先把窗口 所有数据收集起来,等到计算的时候会遍历所有数据
如:
- ProcessWindowFunction
- WindowFunction
应用场景
求 平均数、中位数、1/4 位数
如:求 1,3,5 的平均数
正确算法
先累加再除以数量,(1+3+5)/3=3
错误算法
分步求平均值:
(1+3)/2=2(2+5)/2=3.5