当前位置: 首页 > news >正文

flink学习之窗口处理函数

窗口处理函数

什么是窗口处理函数

Flink 本身提供了多层 API,DataStream API 只是中间的一环,在更底层,我们可以不定义任何具体的算子(比如 map(),filter(),或者 window()),而只是提炼出一个统一的“处理”(process)操作——它是所有转换算子的一个概括性的表达,可以自定义处理逻辑,所以这一层接口就被叫作“处理函数”(process function)。
在这里插入图片描述

如何使用窗口处理函数

进行窗口计算,我们可以直接调用现成的简单聚合方法(sum()/max()/min()),也可以通过调用 reduce()或 aggregate()来自定义一般的增量聚合函数(ReduceFunction/AggregateFucntion);
而对于更加复杂、需要窗口信息和额外状态的一些场景,我们还可以直接使用全窗口函数、把数据全部收集保存在窗口内,等到触发窗口计算时再统一处理。窗口处理函数就是一种典型的全窗口函数。
窗 口 处 理 函 数 ProcessWindowFunction 的 使 用 与 其 他 窗 口 函 数 类 似 , 也 是 基 于
WindowedStream 直接调用方法就可以,只不过这时调用的是 process()

stream.keyBy(_._1).window( TumblingEventTimeWindows.of(Time.seconds(10)) ).process(new MyProcessWindowFunction)

rocessWindowFunction 是一个继承了 AbstractRichFunction 的抽象类,它有四个类型
参数:
IN:input,数据流中窗口任务的输入数据类型。
OUT:output,窗口任务进行计算之后的输出数据类型。
KEY:数据中键 key 的类型。
W:窗口的类型,是 Window 的子类型。一般情况下我们定义时间窗口,W 就是
TimeWindow。

因为全窗口函数不是逐个处理元素的,所以处理数据的方法在这里并不是 processElement(),
而是改成了 process()。方法包含四个参数。

  • key:窗口做统计计算基于的键,也就是之前 keyBy()用来分区的字段。
  • context:当前窗口进行计算的上下文,它的类型就是
  • ProcessWindowFunction 内部定 义的抽象类 Context。
  • elements:窗口收集到用来计算的所有数据,这是一个可迭代的集合类型。 out:用来发送数据输出计算结果的收集器,类型为Collector。

可以明显看出,这里的参数 elements 不再是一个输入数据,而是窗口中所有数据的集合。

ProcessWindowFunction 中除.process()方法外,并没有 onTimer()方法,而是多出了一个
clear()方法,这主要是方便我们进行窗口的清理工作。
至于另一种窗口处理函数 ProcessAllWinfdowFunction,它的用法非常类似。区别在于它基
于的是 AllWindowedStream,相当于对没有 keyBy()的数据流直接开窗并调用 process()方法:

stream.windowAll( TumblingEventTimeWindows.of(Time.seconds(10)) )
.process(new MyProcessAllWindowFunction)
http://www.lryc.cn/news/288174.html

相关文章:

  • Python 基于pytorch从头写GPT模型;实现gpt实战
  • 2023年NOC大赛(学而思赛道)创意编程Python初中组决赛真题
  • 头歌C++之Switch控制语句编程实训
  • CNN卷积理解
  • DataKit迁移MySQL到openGauss
  • Dockerfile里ADD * 保留原来的目录结构
  • C++ 利用容器适配器,仿函数实现栈,队列,优先级队列(堆),反向迭代器,deque的介绍与底层
  • C语言实战系列二:简单超市收银系统
  • coding推送代码Jenkins自动构建部署
  • Kettle-Docker部署+Sqlserver数据同步Mysql+Start定时任务
  • 《微信小程序开发从入门到实战》学习九十三
  • Java服务端使用freemarker+wkhtmltoimage生成Echart图片
  • 一款颜值与实力并存的翻页时钟(免费)
  • Objective-C方法的声明实现及调用
  • 第十四届蓝桥杯国赛 C++ B 组 C 题——班级活动(AC)
  • GraphQL的力量:简化复杂数据查询
  • python环境安装sklearn及报错解决
  • log4j:WARN Please initialize the log4j system properly的解决办法
  • 虹科分享丨汽车技术的未来:Netropy如何测试和确保汽车以太网的性能
  • 代码CE:reference to ‘XX‘ is ambiguous
  • 如果想将企业微信的组织架构同步到内部知识库咋搞?方法来也!
  • 【c语言】扫雷
  • 自然语言处理的崛起:从初步分析到深度理解
  • Git学习笔记:版本回滚
  • OpenCV图像的基本操作
  • 小白水平理解面试经典题目LeetCode 594 Longest Harmonious Subsequence(最大和谐字符串)
  • Vue-35、Vue中使用ref属性
  • 网络通信(15)-C#TCP客户端掉线重连实例
  • React进阶 - 14(说一说”虚拟DOM“中的”Diff算法“)
  • #GPU|LLM|AIGC#集成显卡与独立显卡|显卡在深度学习中的选择与LLM GPU推荐