首页 理论教育 理解窄依赖及其实现方式

理解窄依赖及其实现方式

时间:2023-06-21 理论教育 版权反馈
【摘要】:图6-3 窄依赖和Shuffle依赖共存的转换操作NarrowDependency要求子类实现getParent方法,用于获取一个分区数据来源于父RDD中的哪些分区。窄依赖可进一步分类成一对一依赖和范围依赖,对应实现分别是OneToOneDependency类和RangeDependency类。

理解窄依赖及其实现方式

窄依赖的实现在NarrowDependency抽象类中,实现代码如下。

978-7-111-52928-6-Part03-13.jpg

978-7-111-52928-6-Part03-14.jpg

978-7-111-52928-6-Part03-15.jpg

图6-3 窄依赖和Shuffle依赖共存的转换操作

NarrowDependency要求子类实现getParent方法,用于获取一个分区数据来源于父RDD中的哪些分区(虽然要求返回Seq[Int],实际上却只有一个元素)。窄依赖可进一步分类成一对一依赖和范围依赖,对应实现分别是OneToOneDependency类和RangeDependency类。

1.一对一依赖

一对一依赖表示子RDD分区的编号与父RDD分区的编号完全一致的情况,若两个RDD之间存在着一对一依赖,则子RDD的分区个数、分区内记录的个数都将继承自父RDD。

一对一依赖的实现代码如下。(www.xing528.com)

978-7-111-52928-6-Part03-16.jpg

2.范围依赖

范围依赖是依赖关系中的一个特例,只被用于表示UnionRDD与父RDD之间的依赖关系。相比一对一依赖,除了第一个父RDD,其他父RDD和子RDD的分区编号不再一致,Spark统一将unionRDD与父RDD之间(包含第一个RDD)的关系都叫做范围依赖。范围依赖的实现代码如下。

978-7-111-52928-6-Part03-17.jpg

RangeDepdencency类中getParents方法的一个示例如图6-4所示,对于unionRDD中编号为3的分区,可以计算得到其数据来源于父RDD中编号为1的分区。

978-7-111-52928-6-Part03-18.jpg

图6-4 范围依赖中getParents方法示例

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈