基本转换算子(无状态算子):输入相同的情况下输出一定相同
map:针对流或列表中的每一个元素,输出一个元素
filter:针对流或列表中的每一个元素,输出0个或者1个元素
flatmap:针对流或列表中的每一个元素,输出0个,1个或者多个元素
mapPartition: 对一个分区中的分区进行转换,结果是一个迭代器,转换前后元素个数可能不同
有状态算子:
sum/max/min/maxBy/minBy 通称为滚动聚合算子(rolling aggregation)
reduce(归并): reduce会初始化一个空累加器(类型和流中的元素类型相同,第一条元素到来直接作为累加器保存,并将累加器输出。第二条以及之后到来的元素,和累加器进行累加 *** 作并更新累加器,然后将累加器输出。reduce函数定义的是输入元素和累加器的累加规则。每个key都会维护自己的累加器,输入数据更新完累加器后直接被丢弃,滚动聚合。
这些算子只能在keyBy之后使用
keyBy算子
DataStream -> KeyedStream : 逻辑的将一个流拆分成不相交的分区,每个分区包含具有相同key的元素,在内部以hash的形式实现的。
reduceGroup: 将一个dataset或者一个group聚合成一个或多个元素。reduceGroup是reduce的一种优化方案;它会先分组reduce,然后在做整体的reduce;这样做的好处就是可以减少网络IO
Aggregate: 在数据集上进行聚合求最值,aggregate只能作用于元组上。要使用aggregate,只能使用字段索引名或索引名称来进行分组groupBy(0),否则报错。
distinct: 去重重复数据
first: 去前n个数
join: 将两个DataSet按照一定条件连接到一起,形成新的DataSet
leftOuterJoin: 左外连接,左边的Dataset中的每一个元素,去连接右边的元素
算子的泛化:
flatmap -> map/filter
reduce -> sum/min/max/minBy/maxBy
keyedProcessFunction -> flatmap/reduce
箭头左边的算子可以实现箭头右边的算子
物理分区算子:
broadcast() //将每条数据广播到下游算子的每个分区中
rebalance() // 使用Round-Robin负载均衡算法将输入流平均分配到随后的并行任务中去。可以解决数据倾斜问题。
rescale() //使用的也是Round-Robin负载均衡算法,但只会将数据发送到接下来并行任务的部分任务上。
shuffle() //shuffle方法将数据随机的分配到下游算子的并行任务中去。
global() // 将所有的输入流数据都发送到下游算子的第一个并行任务中去。
custom() // 使用partitionCustom()来自定义分区策略,这个方法接收一个Partitioner对象,这个对象需要实现两个方法 分区逻辑(partition方法)和针对流的哪一个字段或者key进行分区(getKey方法)
多流转换算子( *** 作多条流):
Split Select 两个算子配合使用,调完split后调用select
Connect CoMap
Union 可以合并多条流,条件是每条流数据类型必须相同
DataStream 只能做一些简单的转换 *** 作,如map,filter,flatmap
使用keyBy算子将DataStream转换为KeyedStream后,可以使用滚动聚合算子做一些聚合 *** 作,如
sum,min,max,minBy,maxBy, reduce等。
做完聚合 *** 作KeyedStream有转换为 SingleOutputStreamOperator(继承自DataStream)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)