Spark中的算子都有哪些
Spark中的算子都有哪些
Spark中的算子都有哪些
总的来说,spark分为三大类算子:
-
Transformation 变换/转换算子:这种变换并不触发提交作业,完成作业中间过程处理; Transformation 操作是延迟计算的,也就是说从一个RDD 转换生成另一个 RDD 的转换操作不是马上执行,需要等到有 Action 操作的时候才会真正触发运算
-
Action 行动算子:这类算子会触发 SparkContext 提交 Job 作业; Action 算子会触发 Spark 提交作业(Job),并将数据输出 Spark系统
-
controller 控制操作:Spark中控制算子也是懒执行的,需要Action算子触发才能执行,主要是为了对数据进行缓存。
控制算子有三种,cache,persist,(RDD 持久化原理)
checkpoint,以上算子都可以将RDD持久化,持久化的单位是partition。cache和persist都是懒执行的。必须有一个action类算子触发执行。checkpoint算子不仅能将RDD持久化到磁盘,还能切断RDD之间的依赖关系。
1. Value数据类型的Transformation算子
输入分区与输出分区一对一型
- map算子
- flatMap算子
- mapPartitions算子
- glom算子
输入分区与输出分区多对一型
- union算子
- cartesian算子
输入分区与输出分区多对多型
- grouBy算子
输出分区为输入分区子集型
- filter算子
- distinct算子
- subtract算子
- sample算子
- takeSample算子
Cache型
- cache算子
- persist算子
2. Key-Value数据类型的Transfromation算子
输入分区与输出分区一对一
- mapValues算子
对单个RDD或两个RDD聚集
- combineByKey算子
- reduceByKey算子
- partitionBy算子
- Cogroup算子
连接
- join算子
- leftOutJoin 和 rightOutJoin算子
3. Action算子
无输出
- foreach算子
HDFS算子
- saveAsTextFile算子
- saveAsObjectFile算子
Scala集合和数据类型
- collect算子
- collectAsMap算子
- reduceByKeyLocally算子
- lookup算子
- count算子
- top算子
- reduce算子
- fold算子
- aggregate算子
- countByValue
- countByKey
RDD 中 reduceBykey 与 groupByKey 哪个性能好,为什么
reduceByKey:reduceByKey 会在结果发送至 reducer 之前会对每个 mapper 在本地进行 merge,有点类似于在 MapReduce 中的 combiner。这样做的好处在于,在 map 端进行一次 reduce 之后,数据量会大幅度减小,从而减小传输,保证 reduce 端能够更快的进行结果计算。
groupByKey:groupByKey 会对每一个 RDD 中的 value 值进行聚合形成一个序列 (Iterator),此操作发生在 reduce 端,所以势必会将所有的数据通过网络进行传输,造成不必要的浪费。同时如果数据量十分大,可能还会造成 OutOfMemoryError。
所以在进行大量数据的 reduce 操作时候建议使用 reduceByKey。不仅可以提高速度,还可以防止使用 groupByKey 造成的内存溢出问题。
- 点赞
- 收藏
- 关注作者
评论(0)