算子:
转换算子:RDD进行内部转化,不消耗资源
行动算子:执行job,消耗资源,要看到执行结果必须要行动算子
控制算子
转换算子
map 遍历的单位是每一条记录 , 返回值是一条记录
flatMap 遍历的单位也是每一条记录,但是返回值可以是多条
filter 过滤算子 true为保留 false 过滤掉
mapPartitions 遍历的单位是每一个分区,每一个分区的数据会一次性加载一个集合里面
mapPartitionsWithIndex遍历的单位是每一个分区同时也能拿到分区的编号
join 将两个KV格式的RDD,根据K相同来关联
leftOuterJoin 左外连接
rightOuterJoin 右外连接
fullOuterJoin 全连接
groupByKey 必须作用在KV格式的RDD上,根据key分组
reduceByKey 必须作用在KV格式的RDD上,先根据key进行分组,然后对组内的数据按照传入的聚合函数进行聚合操作
distinct:将RDD里面相同的元素去掉
就是map((_,1)).groupByKey.map(_._1)
sortBy算子 可以指定是按照key排序还是按照value排序
coalesce() 减少分区
repartition(numpartions) = coalesce(numpartions,true)
cogroup fullOuterjoin+groupByKey
zip 算子 他会将两个非KV格式的RDD变成一个KV格式的RDD
zipWithIndex 算子 会将非KV格式的RDD 变成一个KV格式的RDD
K:当前的元素
V:当前的元素所在RDD的索引值
取两个RDD的合集:union
差集:subtract
交集:intersection
glom : 会将每一个分区里面元素合并到一个数组里面
randomSplit
combineByKey:
createCombiner 对每一个分区中每一个分组进行初始化
mergeValue,根据传入的聚合函数,对每一个分区中每一个分组进行聚合
mergeCombiners 在reduce 端的大聚合
行动算子
collect
take(n):取RDD的前n个元素
first = take(1)
foreach
foreachPartition
countByKey
控制算子
cache 默认情况下将RDD放入到内存中(懒执行)
rdd1 = rdd1.cache //将数据写入到内存中
persist 可以手动指定持久化级别
cache和persist的返回值必须赋给一个变量
cache和persist不能立即紧跟action类算子
持久化的单位是一个partition
checkpoint 设置检查点(懒执行),
可以将RDD的数据持久化到hdfs上
可以切断RDD的依赖关系
使用方法:
sc.setCheckpointDir("path") //设置数据写入位置
rdd.checkpoint() //设置检查点,把rdd数据写入path路径下
转换算子和行动算子: