RDD Transformations是Spark在RDD上执行的操作,它会产生一个或多个新的RDD。由于RDD在本质上是不可变的,Transformations总是创建新的RDD,而不更新现有的RDD,因此,这就创建了一个RDD lineage。
RDD谱系(RDD Lineage)也被称为RDD操作图或RDD依赖图。
RDD Transformations是惰性操作(lazy operations),这意味着除非在Spark RDD上调用一个action,否则不会执行任何Transformation。由于RDD是不可变的,任何对它的转换都会导致一个新的RDD,并保持当前RDD不变。
Transformations分为2种:
Narrow Transformation
Narrow Transformation是map()和filter()函数的结果,这些计算数据位于单个分区上,这意味着不会有任何数据在分区之间移动来执行窄转换。
map()、mapPartition()、flatMap()、filter()、union()等函数是Narrow Transformation的一些例子
Wider Transformation
Wider Transformation是groupByKey()和reduceByKey()函数计算的结果,这些计算数据位于许多分区上,这意味着将在分区之间进行数据移动以执行Wider Transformation。因为这些操作会对数据进行洗牌(shuffle),所以它们也被称为(shuffle transformations)。
groupByKey()、aggregateByKey()、aggregate()、join()、repartition()等函数是Wider Transformation的一些示例。
注意:与Narrow转换相比,由于shuffling,Wider Transformation是更昂贵的操作。
参考文献:
Spark RDD Transformations with examples - Spark by {Examples}