概念
Transformation
用来从存在的 rdd 产生新 rdd。rdd 图系,成为 rdd 操作图或者 rdd 依赖图。是逻辑执行计划,有向无循环图 DAG,Transformation 是懒惰执行,当执行 Action 时才被执行。
分类
根据 RDD 转换前后数据集大小变化来分类:不变:map()
变大:flatMap(), union(), Cartesian()
变小:filter, count, distinct, sample
根据被用来计算的元素是否存在于父 RDD 的一个分区中来分类:Narrow transformation:
窄转换,被用来计算的元素存在于父 RDD 的一个分区中。举例:map(), filter(),sample(),union()
Wide transformation:广泛转换,被用来计算的元素存在于父 RDD 的多个分区中。举例:groupbyKey(),join(), reducebyKey()
Action
acton 和真实的数据集打交道。action 的值存到 drivers 或者外部存储系统。action 让 rdd 从懒执行到真移动。action 会产生非 RDD 结果值。
辨析
map() VS flatmap()
相同:接收 RDD 的一行作为输入,在行上执行 function
区别:map 一个输入对应一个输出。可以用来输出每一行的长度。faltmap 一个输入可能对应多个输出。经常用来拆分单词
map() VS mapPartitions()
相同: 都可以实现给出一个函数,去映射 RDD 中所有元素的效果。区别:可编程的细粒度有区别
map 对一个元素进行编程。mapPartitions 对一个分区进行编程。比如当用到外部数据库
连接时常用,一个分区使用一个连接,而不是每一个元素使用一
个连接。
mapPartitions() VS mapPartitionsWithIndex()
区别:mapPartitionsWithIndex 另外有一个表示分区下标编号参数。
reduce() VS fold()
相同:都有两个元素作为输入,产生的与元素相同类型的输出。区别:reduce 多了一个初始化的输入。reduce 空集合抛出异常,fold 可以兼容空集合。
数量
分区数,任务数,CPU 核心数。这些数量的设置跟程序调优息息相关。
参考
Spark RDD Operations-Transformation & Action with Example