在定义了窗口分配器之后,我们需要为每一个窗口明确的指定计算逻辑,这个就是窗口函数要做的事情,
                    当系统决定一个窗口已经准备好执行之后,这个窗口函数将被用来处理窗口中的每一个元素(可能是
                    分组的)。
                    谁可以作为窗口函数来使用:

function 优点 缺点
ReduceFunction 更高效,因为在每个窗口中增量地对
每一个到达的元素执行聚合操作(增量
聚合)
场景覆盖不全,无法获取窗口的元
数据
AggregateFunction(max/maxBy…)
FoldFunction(不推荐)
WindowFunction/AllWindowFuncti
on(遗留)
场景覆盖全面,可以拿到窗口的元数
据;
• 相对低效一些,先把属于窗口的
所有元素都缓存,等到该计算了,
全部拿出来再计算;
• 都可跟reducefun、 aggfun、
foldfun组合使用
ProcessWindowFunction/Process
AllWindowFunction
ProcessWindowFunction与前三者
之一组合(混搭)
兼具高效和场景的覆

特别提示:在没有专门说明的情况下,凡是带All的API就是给Non-keyed window使用的

ReduceFunction 含义: ReduceFunction定义了如何把两个输入的元素进行合并来生成相同类型的输出元素的过程,Flink使用ReduceFunction来对窗口中的元素进行增量聚合AggregateFunction

AggregateFunction是ReduceFunction的普适版本,它需要指定三个类型:输入类型(IN)、 累加器类型(ACC)和输出类型(OUT)。
输入类型是输入流中的元素类型,AggregateFunction有一个方法可以将一个输入元素添加到一个累加器中。该接口还具有创建初始累加器、将两个累加器合并到一个累加器以及从累加器中提取输出(类型为OUT)的方法。 (相当于ReduceFunction自定义函数版本)

FoldFunction 含义: FoldFunction指定了一个输入元素如何与一个指定输出类型的元素合并的过程,这个FoldFunction 会被每一个加入到窗口中的元素和当前的输出值增量地调用,第一个元素是与一个预定义的类型为输出类型的初始值合并

WindowFunction/AllWindowFunction(会逐步退出历史舞台)

ProcessWindowFunction/ProcessAllWindowFunction 含义: ProcessWindowFunction获得一个包含窗口所有元素的可迭代器, 以及一个具有时间和状
态信息访问权的上下文对象,这使得它比其他窗口函数提供更大的灵活性。这是以性能和资源消耗为代价的,因为元素不能增量地聚合,而是需要在内部缓冲,直到认为窗口可以处理为止。
•indowFunctionde的升级版,可以跟ReduceFunction /AggregateFunction/FoldFunction结合使用(推荐用法)

在ProcessWindowFunction中使用每个窗口的状态  含义: ProcessWindowFunction可以与ReduceFunction、 AggregateFunction或FoldFunction组
合,以便在元素到达窗口时增量地聚合它们。当窗口关闭时, ProcessWindowFunction将提供聚
合结果。 ProcessWindowFunction可以在访问附加窗口元信息的同时进行增量计算。

最新文章

  1. Android应用-听听
  2. c 开源代码
  3. Serverlet程序
  4. ios NavBar+TarBar技巧
  5. 通过android.provider包查看android系统定义的provider.
  6. linux 开机自动挂载ntfs盘
  7. java 不同意同一账户不同IP 同一时候登录系统解决的方法 兼容IE Firefox
  8. CentOS7/RHEL7安装Redis步骤详解
  9. iptables的CLUSTER target以太网交换机和想法
  10. 对于querystring取值时候发生+号变空格的问题
  11. Windows和Linux查看和更改mysql连接池
  12. The 14th tip of DB Query Analyzer
  13. 解决ubuntu unity下gvim菜单消失的问题
  14. 微信小程序之动态获取元素宽高
  15. 微信小程序----wxss设置样式
  16. vue单页应用前进刷新后退不刷新方案探讨
  17. hdu2460 e-DCC染色缩点+暴力LCA
  18. python 随机数模块 -- random
  19. 简明 ASP.NET Core 手册2018
  20. c#文件比较Code

热门文章

  1. QinQ 技术解析
  2. 22. Jmeter NON GUI模式
  3. std::locale与boost::locale的学习
  4. Vue 学习笔记之 —— 组件(踩了个坑)
  5. 如何调用DLL中的导出类
  6. git branch 分支和分支合并
  7. 【POJ】2031 Building a Space Station
  8. ArcGis基础——动态显示面要素的面积值
  9. java oop第12章_IO、序列化和反序列化
  10. Android SDK中无法安装HAXM installer