【摘要】:图6-3 窄依赖和Shuffle依赖共存的转换操作NarrowDependency要求子类实现getParent方法,用于获取一个分区数据来源于父RDD中的哪些分区。窄依赖可进一步分类成一对一依赖和范围依赖,对应实现分别是OneToOneDependency类和RangeDependency类。
窄依赖的实现在NarrowDependency抽象类中,实现代码如下。
图6-3 窄依赖和Shuffle依赖共存的转换操作
NarrowDependency要求子类实现getParent方法,用于获取一个分区数据来源于父RDD中的哪些分区(虽然要求返回Seq[Int],实际上却只有一个元素)。窄依赖可进一步分类成一对一依赖和范围依赖,对应实现分别是OneToOneDependency类和RangeDependency类。
1.一对一依赖
一对一依赖表示子RDD分区的编号与父RDD分区的编号完全一致的情况,若两个RDD之间存在着一对一依赖,则子RDD的分区个数、分区内记录的个数都将继承自父RDD。
一对一依赖的实现代码如下。(www.xing528.com)
2.范围依赖
范围依赖是依赖关系中的一个特例,只被用于表示UnionRDD与父RDD之间的依赖关系。相比一对一依赖,除了第一个父RDD,其他父RDD和子RDD的分区编号不再一致,Spark统一将unionRDD与父RDD之间(包含第一个RDD)的关系都叫做范围依赖。范围依赖的实现代码如下。
RangeDepdencency类中getParents方法的一个示例如图6-4所示,对于unionRDD中编号为3的分区,可以计算得到其数据来源于父RDD中编号为1的分区。
图6-4 范围依赖中getParents方法示例
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。