使用php做的学校网站,广告设计与制作需要学什么,建筑招聘最好的网站,wordpress微信公众号显示窗口处理函数
什么是窗口处理函数
Flink 本身提供了多层 API#xff0c;DataStream API 只是中间的一环#xff0c;在更底层#xff0c;我们可以不定义任何具体的算子#xff08;比如 map()#xff0c;filter()#xff0c;或者 window()#xff09;#xff0c;而只是…窗口处理函数
什么是窗口处理函数
Flink 本身提供了多层 APIDataStream 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 的抽象类它有四个类型 参数 INinput数据流中窗口任务的输入数据类型。 OUToutput窗口任务进行计算之后的输出数据类型。 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)