寬窄依賴
●兩種依賴關係類型
RDD和它依賴的父RDD的關係有兩種不同的類型,即
寬依賴(wide dependency/shuffle dependency)
窄依賴(narrow dependency)
●圖解
●如何區分寬窄依賴
窄依賴:父RDD的一個分區只會被子RDD的一個分區依賴
寬依賴:父RDD的一個分區會被子RDD的多個分區依賴(涉及到shuffle)
●面試題:
子RDD的一個分區依賴多個父RDD是寬依賴還是窄依賴?
不能確定,也就是寬窄依賴的劃分依據是父RDD的一個分區是否被子RDD的多個分區所依賴,是,就是寬依賴,或者從shuffle的角度去判斷,有shuffle就是寬依賴
●寬窄依賴的算子:
窄依賴算子有:map, filter, union, join(父RDD是hash-partitioned ), mapPartitions, mapValues
寬依賴算子有:groupByKey, join(父RDD不是hash-partitioned ), partitionBy
●爲什麼要設計寬窄依賴
1.對於窄依賴
Spark可以並行計算
如果有一個分區數據丟失,只需要從父RDD的對應1個分區重新計算即可,不需要重新計算整個任務,提高容錯。
2.對於寬依賴
是劃分Stage的依據 (詳細見https://blog.csdn.net/weixin_44036154/article/details/105387304)