Spark-core scala的40多种算子汇总
本篇言简意赅,如有疑惑,请看前几篇相关算子的文章
因为没法上传xmind格式,只能导入md上传
本人不才,如有错,一起交流
Transformation
map
对RDD中的每一个元素都执行,前后元素的对应关系是1:1。也就是说,对一个元素执行RDD的操作,可以产生一个元素。
RDD使用map方法,有N个数据就加载了N次
mapPartitions
1:1对应 分区
RDD使用mapParatition方法,分批加载,有N个区加载N次; 在不需要返回数据的条件下使用,就是说,以后操作不需要用到foreachPartition的执行结果
mapValue
k不变 改动v
flatmap
对RDD中的每一个元素都执行,前后元素的对应关系是1:N。将每个元素合并成集合
flatMapValues
k不变 改动v
reduceByKey
要求数据(K,V) (K, V) —> (K, V),对每个键对应的多个值进行合并操作
groupByKey
要求数据(K,V),对key进行分组,分组后相同key的数据拉取到一起,组成了一个集合 (K, V).groupByKey() --> (K, CompactBuffer(v1,v2))
sortByKey
排序
sortBy
按照V(Int)进行排序,默认正序排列
zip
1:1压缩集合元素 压缩的集合元素个数必须相同
zipWithIndex
压缩数据和所在索引
filter
对RDD中的每一个元素执行对应的func函数,保留该func函数返回值为true的元素,组成一个新的RDD,过滤掉返回值为false的元素。
sample
sample是Spark中的抽样算子,从RDD中抽取一定比例的数据,接收三个参数:
union
返回两张表中去重之后的结果
分区数=诸多父类分区数的和
union all
返回两张表的所有结果
intersection
取交集
subtract
取差集
distinct
去重,即sql中的关键字distinct。
join
合并,不相同的元素不打印
分区数=最多父类的分区数
leftOuterJoin
偏左合并,以左为主,左边的全都打印,没有的显示None
遍历元素可以取元组下标
rightOuterJoin
偏右合并
fullOuterJoin
全合并,空值显示None
getNumPartitions
分区数
mapPartitionsWithIndex
取分区索引号和该分区中的数据
cogroup
子主题 1
coalesce
减少分区数(常用) 窄依赖 添加属性true = repartition
repartition
增加分区数(常用) 宽依赖产生sheffle
Action
reduce
聚集数据集中的所有元素,将所有数据进行操作,如简单计算: +
collect
以数组的形式将所有数据集合的结果拉取到客户端
count
返回数据集的元素个数
first
返回数据集的第一个元素(类似于take(1))
take
返回一个数组,返回数据集的前n个元素
takeSample
withReplacement:结果中是否可重复 num:取多少个 seed:随机种子
返回一个数组,在数据集中随机采样num个元素组成,可以选择是否用随机数替换不足的部分,seed用于指定的随机数生成器种子
countByKey
要求数据(K,V) 返回一个(K,Int)对的map,表示每一个对应的元素个数
countByValue
统计 将原集合的每个kv看做每一个整体,再统计其整体出现的次数 ((k,v)n)
foreach
在数据集的每一个元素上,运行函数funct,通常用于更新一个累加器变量,或者和外部存储系统做交互
数据使用foreach方法,有N个数据就加载了N次
foreachPartition
RDD使用mapParatition方法,分批加载,有N个区加载N次
在不需要返回数据的条件下使用,就是说,以后操作不需要用到foreachPartition的执行结果
持久化算子
cache
默认将RDD的数据持久化到内存中,cache是懒执行,需要触发算子触发
注意:chche () = persist()=persist(StorageLevel.Memory_Only)
persist
可以指定持久化的级别
checkpoint
当RDD的lineage某些逻辑非常复杂,还可以使用checkpoint对RDD进行持久化
注意:不要频繁使用