Spark的操作算子
一、在Apache Spark中,RDD
(弹性分布数据集)是一个非常重要的核心概念,很多计算必须依赖于RDD
。一般来说,RDD
包括两个操作算子:
- 变换:变换算子的特点是懒执行,变换操作并不会立即执行,而是需要等到有动作操作的时候才会真正进行计算,并得到结果。
- 动作:动作算子的特点是立即执行,动作算子会对
RDD
计算出一个结果,并把结果返回到驱动器程序中,或把结果存储到外部存储系统(如HDFS
)中。
二、Spark的操作算子(以PySpark
为例)
first
操作
动作算子,rdd.first()
,获取rdd
中的第一个元素。max
操作
动作算子,rdd.max()
,获取rdd
中的最大的元素。sum
操作
动作算子,rdd.sum()
,返回rdd
中的求和数值。take
操作
动作算子,rdd.take(n)
,获取rdd
中前n个元素。top
操作
动作算子,rdd.top(n)
,获取降序后的rdd
中前n个元素。collect
操作
动作算子,rdd.collect()
,从集群中拉取rdd
的元素到driver端,转化为数组。collectMap
操作
动作算子,rdd.collectMap()
,与collect
操作类似,适用于键值RDD
,将它们转换为Map映射以保留其键值结构。countByKey
操作
动作算子,rdd.countByKey()
,统计键值rdd
中每个key
的数量,以字典形式返回countByValue
操作
动作算子,rdd.countByValue()
,统计rdd
中每个元素的数量,以字典的形式返回。glom
操作
变换算子,rdd.glom()
,将rdd
各分区的元素转化为数组形式。coalesce
操作
变换算子,rdd.coalesce(n, isShuffle=Flase)
,对rdd
重新划分n个区,其中isShuffle
(默认为False)表示重新分区过程中是否进行混淆操作。combineByKey
操作
变换算子,rdd.combineByKey(createCombiner, mergeValue, mergeCombiners, numPartitions=None, partitionFunc=portable_hash)
,其中前3个参数为必填,为操作函数。
(1)createCombiner(V) -> C
函数,对每个key下的第一个值V进行初始化成C,如类型转换等。
(2)mergeValue(C, V) -> C
函数,将key下的其它值添加到(1)初始化的C中.
(3)mergeCombiners(C, C2) -> C
函数,对(2)中以完成合并的各key组合C,进行合并.distinct
操作
变换算子,rdd.distinct()
,对rdd
去重。filter
操作
变换算子,rdd.filter(func)
,返回rdd
中满足func
的元素。flatMap
操作
变换算子,rdd.flatMap(func)
,对rdd
中的元素按func
处理,将处理进行扁平化处理。flatMapValues
操作
变换算子,rdd.flatMapValues(func)
,对键值格式的rdd
中的value进行func
定义的逻辑处理。