Spark的算子分类及功能

Spark的算子分类及功能
Spark的算子作用
1.输入:在Spark程序运行中,数据从外部数据空间输入Spark,数据进入Spark运行时数据空间,转化为Spark中的数据块,通过BlockManager进行管理
2.运行:在Spark数据输入形成RDD后便可以通过变换算子,如filter等,对数据进行操作并将RDD转化为新的RDD,通过Action算子,触发Spark提交作业。如果数据需要复用,可以通过cache算子,将数据缓存到内存。
3.输出:程序运行结束数据会输出Spark运行时空间,存储到分布式存储中,火scala数据或集合中。
Spark的核心数据模型是RDD,但RDD是个抽象类,具体有各子类实现,如MapperedRDD、ShuffledRDD等子类。Spark将常用的大数据操作都转化成为RDD的子类。
算子的分类
大致可以分为3大类算子
1.value数据类型的Transformation算子,这种变换并不出发提交作业,针对处理的数据项是value型的数据
2.key-value数据类型的Transformation算子,这种变换并不触发提交作业,针对处理的数据项是key-value型的数据对
3.Action算子,这类算子会触发SparkContext提交job作业
Value型Transformation算子
处理数据类型为value型的Transformation算子可以根据RDD变换算子的输入分区与输出分区关系分为以下几种类型。
1.输入分区与输出分区一对一型
2.输入分区与输出分区多对以型
3.输入分区与输出分区多对多型
4.输出分区为输入分区子集型
5.还有一种特殊的输入与输出分区一对一的算子类型:cache型,cache算子对RDD分区进行缓存。
输入分区与输出分区一对一型
map
将原来的RDD的每个数据项通过map中的用户自定义函数f映射转变为一个新的元素。源码中的map算子相当于初始化一个RDD,新RDD兼做MappedRDD(this,sc.clean(f))
flatMap
将原来的RDD中的每一个元素通过函数f转换为新的元素,并将生成的RDD的每个集合中的元素合并为一个集合,内部创建FlatMappedRDD(this,sc。clean(f))
mapPartitions
mapPatitions函数获取到每个分区的迭代器,在函数中通过这个分区整体的迭代器对整个分区的元素进行操作。内部实现是生成MapPartitionsRDD。
glom
glom函数将每个分区形成一个数组,内部实现是返回GlommedRDD
输入分区与输出分区多对一型
union
使用union函数时需要保证两个RDD元素的数据类型相同,返回的RDD数据类型和被合并的RDD元素数据类型相同,并不进行去重操作,保存所有元素。想过想去重,可以使用distinct()。++符号相当于union函数操作。
cartesian
对两个RDD内的所有元素进行笛卡尔积操作,操作后,内部实现返回CartesianRDD。
输入分区与输出分区多对多型
groupBy:将元素通过函数生成相应的key,数据就转化为key-value格式,之后将key相同的元素分成一组。

你可能感兴趣的:(spark)