partitionBy
reduceByKey
groupByKey
combineByKey
aggregateByKey
foldByKey
sortByKey
join
cogroup
mapValues
flatMapValues
map
flatMap
filter
distinct
mapPartition
mapPartitionWithIndex
union
insertsection
subtract
coalesce
repartition
randomSplit
glom
zip
zipPartitions
zipWithIndex
zipWithUniqueld
sortBy
基础转换
键值对转换
源码
一进一出
案例
基于map以及reduceByKey的封装,同时重载方法可以修改分区数,默认情况下distinct和原分区数一致
与map不同的是,某个RDD有2个分区,10个元素,那么map是将元素直接依次应用到f函数上,而mapPartition操作中则是先遍历分区,再遍历分区中的元素,第一个参数是迭代器,第二个参数是是否保留分区信息,默认是false,除非上游是简直对且函数对key进行修改,否则保留分区信息无意义
与mapPartition 不同,输出结果带分区号
返回数据并集
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
不会对数据去重
返回数据交集
15,16,17,18,19,20
返回数据差集
12,1,13,2,14,3,4,5,6,7,8,9,10,11
减少分区
第二个参数默认是false,如果目标分区数大于原始分区,此操作无意义,维持原分区不变,对于较多分区向较少分区转换,coalesce 不会产生shuffle,而向多分区转换类比 repartition
其实底层是 coalesce 但是shuffle 参数是true,所以无论是多分区向少分区转换还是少分区向多分区转换都会产生shuffle,coalesce 开启shuffle 与 repartition 一致
拆分RDD分配权重值
最好是 1,3,4,2 之间加起比例为1 1/10 + 3/10 + 4/10 + 2/10 = 1
每个RDD 中元素个数近似为权值
将RDD中每个分区变成一个数组,放置在新的RDD中
将两个RDD以键值对方式进行合并,key为EDD第一个元素,value为RDD 第二个元素
如果两个RDD分区数不一致,报错
将两个RDD按照分区号进行合并
将RDD中元素与该RDD 索引进行合并
该元素与元素的唯一id对应
id生成算法
xn +k
n分区数,k 分区号,x 自然数 从0开始
排序,默认升序
重分区生成shuffleRDD
对于RDD中相同的K和V的值进行聚合
设置RDD分区数,指定分区数个数
(aads,321) (zs,45)
createCombiner:
该参数是一个操作,当遍历RDD中每一个元素,如果该元素对于的K是被第一次访问,则会调用createCombiner操作来创建组合器从而将元素的值从V类转换为C类
mergeValue
将 C 类型和V 类型转换为C类型
combineByKeyWithClassTag
一个RDD 有多个分区,多个拥有相同的k 可以被分散到不同的分区中,每个分区有独立的Combiner,拥有相同的键的元素会先在各个所在分区进行聚合,然后通过 mergeCombiners 函数将多个分区中的函数将多个分区各自的聚合结果按照键做最后一次聚合
(zs,12.0),(aads,277.0)
zeroValue
设置聚合时的初始值,可以是数字或者集合
seqOp
将值V聚合到类型为U的对象中
combOp
跨分区聚合,对数据进行最终的汇总时调用此操作
原理与combineByKey相同,是对combinerByKey的封装,简化了操作 aggregateByKey
和reduceBykey雷同,但是接受传入初始值根据key聚合
zeroValue 为初始值
结果
(zs,2122)->(aads,2321f233f)
aggregateByKey , foldByKey , reduceByKey 三个操作本质都是调用combineByKey
combineByKey 和 aggregateByKey 输入输出类型可以不一致,但是 foldByKey 与 reduceByKey 输入输出类型必须一致
根据key排序,可以选择倒序或者正序
(aads,321f),(aads,233f),(zs,1),(zs,2)
相同的key的值聚合在一起构成一个集合,不同的舍弃
代码
(zs,(1,2)),(zs,(2,2)),(aads,(321f,233f)),(aads,(233f,233f))
相当于求并集
(aads2,(CompactBuffer(),CompactBuffer(321f))),(zs,(CompactBuffer(1, 2),CompactBuffer(2))),(zs1,(CompactBuffer(),CompactBuffer(1))),(aads,(CompactBuffer(321f, 233f),CompactBuffer(233f)))
对v进行操作,返回新的RDD
(zs,1 元),(zs,2 元),(aads,321f 元),(aads,233f 元)
(zs,1),(zs,),(zs,2),(zs, ),(zs,元),(zs,2),(zs,),(zs,3),(zs, ),(zs,元),(aads,3),(aads,2),(aads,1),(aads,f),(aads,),(aads,4),(aads, ),(aads,元),(aads,2),(aads,3),(aads,3),(aads,f),(aads, ),(aads,元)