substract
用cogroup实现 效率低
substract 求差集
shuffle之后 在每个分区将重复的部分相减 这样比cogroup效率高
如果之前都被同样的分区器分区过了 就不用再shuffle了
substract调用substractbykey 再调用一个substractRDD
repartition coalesce
可以改变分区的数量 ,底层调用coalesce
coalesce 减少分区数量可以不shuffle,但是增加分区数量一定要shuffle
但是分区器变了,是生成一个随机数 作为key分区 更均匀。
sortedBy
是transition算子 但是会触发action 进行全局抽样
按数据抽样 分区 然后将数据按范围分到不同的分区排序 然后再汇总
再map端进行
collect
调用runjob方法 里面的函数 在executor中运行 Array。concat在driver端执行
array是有角标的 所以返回的结果会按顺序排列
count
reduce 和 sum
第一个函数在executor端执行
第二个函数在driver端执行
aggregate
每个分区应用一次初始值
全局在应用一次初始值
take
按需要触发action
取出的数据在几个分区就触发几个action
take(0)不触发action
takeOrdered
默认升序 排序取出前三个takeOrdered(3)
在map端创造一个有限优先队列 将每个分区的top3放进去
分区之后将队列再相加 得出最大的三个
返回
max min
调用reduce方法 出入比大小函数
不需要shuffle
foreach foreachpartition
将每一个迭代器应用一下外部的函数
foreach一个分区应用一下函数
如果要建立连接
foreach要建立很多次 跟mappartitionRDD一样的