Spark-core scala的40多种常用算子汇总

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进行持久化
​ 注意:不要频繁使用

你可能感兴趣的:(大数据,Spark)