教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

兩種RDD的依賴關(guān)系介紹

更新時(shí)間:2021年01月05日18時(shí)00分 來源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

在Spark中,不同的RDD之間具有依賴的關(guān)系。RDD與它所依賴的RDD的依賴關(guān)系有兩種類型,分別是窄依賴(narrow dependency)和寬依賴(wide dependency)。

窄依賴是指父RDD的每一個(gè)分區(qū)最多被一個(gè)子RDD的分區(qū)使用,即OneToOneDependencies。窄依賴的表現(xiàn)一般分為兩類,第一類表現(xiàn)為一個(gè)父RDD的分區(qū)對應(yīng)于一個(gè)子RDD的分區(qū);第二類表現(xiàn)為多個(gè)父RDD的分區(qū)對應(yīng)于一個(gè)子RDD的分區(qū)。也就是說,一個(gè)父RDD的一個(gè)分區(qū)不可能對應(yīng)一個(gè)子RDD的多個(gè)分區(qū)。為了便于理解,我們通常把窄依賴形象的比喻為獨(dú)生子女。當(dāng)RDD執(zhí)行map、filter及union和join操作時(shí),都會(huì)產(chǎn)生窄依賴,如圖1所示。

圖1 Narrow Dependencies窄依賴

從圖1可以看出,RDD做map、filter和union算子操作時(shí),是屬于窄依賴的第一類表現(xiàn);而RDD做join算子操作(對輸入進(jìn)行協(xié)同劃分)時(shí),是屬于窄依賴表現(xiàn)的第二類。這里的輸入?yún)f(xié)同劃分是指多個(gè)父RDD的某一個(gè)分區(qū)的所有Key,被劃分到子RDD的同一分區(qū),而不是指同一個(gè)父RDD的某一個(gè)分區(qū),被劃分到子RDD的兩個(gè)分區(qū)中。當(dāng)子RDD做算子操作,因?yàn)槟硞€(gè)分區(qū)操作失敗導(dǎo)致數(shù)據(jù)丟失時(shí),只需要重新對父RDD中對應(yīng)的分區(qū)(與子RDD相對應(yīng)的分區(qū))做算子操作即可恢復(fù)數(shù)據(jù)。

寬依賴是指子RDD的每一個(gè)分區(qū)都會(huì)使用所有父RDD的所有分區(qū)或多個(gè)分區(qū),即OneToManyDependecies。為了便于理解,我們通常把寬依賴形象的比喻為超生。當(dāng)RDD做groupByKey和join操作時(shí),會(huì)產(chǎn)生寬依賴,如圖2所示。

1609840332126_2.jpg

圖2 Wide Dependencies寬依賴

從圖2可以看出,父RDD做groupByKey和join(輸入未協(xié)同劃分)算子操作時(shí),子RDD的每一個(gè)分區(qū)都會(huì)依賴于所有父RDD的所有分區(qū)。當(dāng)子RDD做算子操作,因?yàn)槟硞€(gè)分區(qū)操作失敗導(dǎo)致數(shù)據(jù)丟失時(shí),則需要重新對父RDD中的所有分區(qū)進(jìn)行算子操作才能恢復(fù)數(shù)據(jù)。

需要注意的是,join算子操作既可以屬于窄依賴,也可以屬于寬依賴。當(dāng)join算子操作后,分區(qū)數(shù)量沒有變化則為窄依賴(如join with inputs co-partitioned,輸入?yún)f(xié)同劃分);當(dāng)join算子操作后,分區(qū)數(shù)量發(fā)生變化則為寬依賴(如join with inputs not co-partitioned,輸入非協(xié)同劃分)。




猜你喜歡:

RDD是如何操作數(shù)據(jù)轉(zhuǎn)換的?RDD轉(zhuǎn)換算子API示例

RDD有什么特征?

spark筆記之RDD容錯(cuò)機(jī)制之checkpoint

傳智教育大數(shù)據(jù)培訓(xùn)課程

0 分享到:
和我們在線交談!