Spark的寬依賴和窄依賴

2021-09-06 13:47:30 字數 1016 閱讀 9626

spark的計算的基本單位乙個乙個的運算元,其計算流程也是由乙個個基本的運算元構成的,這些運算元之間的依賴關係可以分為寬依賴和窄依賴。

spark是分布式計算,其資料也是分布式的,即所計算的資料可能分為好多個塊。有些計算對資料的操作相對簡單,即某一塊兒的資料處理不需要涉及到其他塊的資料,就是對本塊資料處理完可以直接輸出到下乙個資料塊,中間不需要更多的過程參與。比如map()運算元,本身就是對每個資料進行迴圈處理,一條資料基本上對應一條輸出結果,繼而乙個資料塊兒也是對應的輸出乙個資料塊兒。即父資料塊的結果只輸出到乙個子資料塊兒中,這就是所說的窄依賴。如下圖所示:

上面三個圖中,可以看到父塊的資料經過運算元處理後都輸出到了唯一的子塊兒,每乙個父塊兒資料的產生不需要和其他父塊兒的資料進行運算和操作,直接輸出到子塊兒中。像上圖中的map,filter,union都是窄依賴操作的運算元,foreach也是,只不過他不會產生下乙個rdd,即沒有返回值。而join操作可能是窄依賴,就需要看這個join對資料的操作符不符合上面所說的現象,否則就不是窄依賴。

上面說了窄依賴,與其對應的就是寬依賴。寬依賴中,父資料塊中的資料會經過處理後會輸出到多個子資料塊兒,如下圖所示:

乙個父塊兒對應多個子塊兒的輸出,舉個例子:假設有兩個資料塊,乙個資料塊中有(one,tow)兩個單詞,兩外乙個資料塊兒中有(one,tow)兩個單詞,現在我們需要對這兩個塊兒的資料進行groupbykey的操作,那麼資料的輸出結果是兩個資料塊,one乙個,two乙個。這個可以看到每個父塊兒都需要把自己的資料輸出到不同的子塊兒之中,這就是寬依賴。

其實更進一步說,寬依賴的實質,就是發生了shffule操作,計算過程中,需要將不同資料塊兒的資料先綜合一下,進行相關的計算之後,然後再輸出到對應的資料塊兒中。

以上是本人對寬窄依賴的理解,不對之處還請指出。

寬依賴和窄依賴 Spark 寬依賴和窄依賴

1.前言 上一節spark dag概述 spark中rdd的高效與dag圖有著莫大的關係,在dag排程中需要對計算過程劃分stage,暴力的理解就是stage的劃分是按照有沒有涉及到shuffle來劃分的,沒涉及的shuffle的都劃分在乙個stage裡面,這種劃分依據就是rdd之間的依賴關係。針對...

Spark 寬依賴和窄依賴

spark中rdd的高效與dag圖有著莫大的關係,在dag排程中需要對計算過程劃分stage,暴力的理解就是stage的劃分是按照有沒有涉及到shuffle來劃分的,沒涉及的shuffle的都劃分在乙個stage裡面,這種劃分依據就是rdd之間的依賴關係。針對不同的轉換函式,rdd之間的依賴關係分類...

Spark 寬依賴和窄依賴

站在父rdd角度 窄依賴 一對一 站在父rdd角度 寬依賴 一對多 寬依賴和窄依賴 寬依賴 父rdd的分割槽被子rdd的多個分割槽使用 例如 groupbykey reducebykey sortbykey等操作會產生寬依賴,會產生shuffle 窄依賴 父rdd的每個分割槽都只被子rdd的乙個分割...