RDD和它依赖的父RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency)。
窄依赖
窄依赖指的是每一个父RDD的Partition最多被子RDD的一个Partition使用,例如map、filter、union等操作会产生窄依赖。
总结:窄依赖我们形象的比喻为独生子女
宽依赖
宽依赖指的是多个子RDD的Partition会依赖同一个父RDD的Partition,例如 groupByKey、reduceByKey、sortByKey等操作会产生宽依赖,会产生shuffle。
总结:宽依赖我们形象的比喻为超生
注意:join操作有两种情况:如果两个RDD在进行join操作时,一个RDD的partition仅仅和另一个RDD中已知个数的Partition进行join,那么这种类型的join操作就是窄依赖,例如图1中左半部分的join操作(join with inputs co-partitioned);其它情况的join操作就是宽依赖,例如图1中右半部分的join操作(join with inputs not co-partitioned),由于是需要父RDD的所有partition进行join的转换,这就涉及到了shuffle,因此这种类型的join操作也是宽依赖
这里引用自(https://blog.csdn.net/album_gyd/article/details/76651094)。
下图是原码中的一张图:可以发现一个问题Dependency(依赖)的意思
可以发现ShuffleDependency是其子类(即宽依赖)
NarrowDependency是其子类(即窄依赖)