-转换算子Transformation
*转换算子执行完毕之后,会创建新的RDD,并不会马上执行计算
*map
对RDD中的元素进行一个个映射
*mapPartitions
以分区为单位,对RDD中的元素进行映射
*mapPartitionsWithIndex
以分区为单位,对RDD中的元素进行映射,并且带分区编号
*flatMap
对RDD中的元素进行扁平化处理
*glom
将RDD中每一个分区中的单个元素,转换为数组
*groupBy
按照一定的规则,对RDD中的元素进行分组
*filter
按照一定的规则,对RDD中的元素进行过滤
*sample
>参数1:是否抽样放回 true放回 false不放回
>参数2
参数1 true 期望元素出现的次数 > 0
参数1 false 每一个元素出现的概率 [0,1]
>参数3
随机算法的初始值(种子)
>takeSample(行动算子)
*distinct
去重
底层是通过map + reduceByKey完成去重操作
*改变分区
>coalesce
一般用于缩减分区,默认不执行shuffle
>repartition
一般用于扩大分区,默认执行shuffle
底层调用的就是coalesce
*sortBy
按照指定规则,对RDD中的元素进行排序,默认升序
*pipe
对于RDD中的每一个分区,都会执行pipe算子中指定的脚本
*union
合集
*intersection
交集
*subtract
差集
*zip
拉链
注意:必须要保证分区数以及每一个分区中元素的个数一致
*partitionBy
按照指定的分区器,通过key对RDD中的元素进行分区
默认分区器 HashPartitioner
*reduceByKey
将相同的key放在一起,对Value进行聚合操作
*groupByKey
按照key对RDD中的元素进行分组
*aggregateByKey(zeroValue)(分区内计算规则,分区间计算规则)
*foldByKey(zereValue)(内间计算规则)
是aggregateByKey的简化,区内和分区间计算规则相同
*combineByKey(对当前key的value进行转换,分区内计算规则,分区间计算规则)
*几种聚合算子对比
>reduceByKey(_+_)
combineByKeyWithClassTag[V]((v: V) => v, func, func)
>aggregateByKey(zeroValue)(cleanedSeqOp,combOp)
combineByKeyWithClassTag[U]((v: V) => cleanedSeqOp(createZero(), v),cleanedSeqOp, combOp)
>foldByKey
combineByKeyWithClassTag[V]((v: V) => cleanedFunc(createZero(), v),cleanedFunc, cleanedFunc)
>combineByKey
combineByKeyWithClassTag(createCombiner, mergeValue, mergeCombiners)
*sortByKey
按照RDD中的key对元素进行排序
*mapValues
只对RDD中的Value进行操作
*join&cogroup
-行动算子Action
*行动算子执行后,才会触发计算
*reduce
对RDD中的元素进行聚合
*collect.foreach和foreach
>collect.foreach
将每一个Excutor中的数据收集到Driver,形成一个新的数组
.foreach不是一个算子,是集合的方法,是对数组中的元素进行遍历
>对RDD中的元素进行遍历
*count
获取RDD中元素的个数
*countByKey
获取RDD中每个key对应的元素个数
*first
获取RDD中第一个元素
*take
获取RDD中的前几个元素
*takeOrdered
获取排序后的RDD中的前几个元素
*aggregate&fold
>aggregateByKey 处理kv类型的RDD,并且在进行分区间聚合的时候,初始值不参与运算
>fold 是aggregate的简化版
*save相关的算子
>saveAsTextFile
>saveAsObjectFile
>saveAsSequenceFile(只针对KV类型RDD)