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
定义的逻辑处理。