Spark源码学习-001
RDD的依赖有两大类
NarrowDependency (窄依赖)
定义了一个抽象方法, getParent
, 用于获取子RDD分区对应的父RDD分区列表。
def getParents(partitionId: Int): Seq[Int]
OneToOneDependency
非常基础的依赖关系,表示每个子RDD分区都一对一的依赖于父RDD分区。
RangeDependency
构造器要传三个参数,
- inStart: 父RDD起始位置
- outStart: 子RDD起始位置
- length: 依赖range的长度
当length=1时, RangeDependency就退化成为了OneToOneDependency
PruneDependency
PruneDependency
描述了 PartitionPruningRDD
和它对应父RDD的依赖关系。
看名字 Prune —— 修剪,这里特指是对分区的修剪, 所以它的构造方法要传入一个 partitionFilterFunc, 用于执行修剪过滤。
the child RDD contains a subset of partitions of the parents
@transient
val partitions: Array[Partition] = rdd.partitions
.filter(s => partitionFilterFunc(s.index)).zipWithIndex
.map { case(split, idx) => new PartitionPruningRDDPartition(idx, split) : Partition }
override def getParents(partitionId: Int): List[Int] = {
List(partitions(partitionId).asInstanceOf[PartitionPruningRDDPartition].parentSplit.index)
}
它对应的RDD是PartitionPruningRDD
。