概念
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
发表回复