SPARK[RDD之分區(qū)函數(shù)]

rdd的計(jì)算都是以partiotion為單元的,這些分區(qū)的轉(zhuǎn)換函數(shù)(見(jiàn)后面的章節(jié))不會(huì)直接返回結(jié)果。當(dāng)出現(xiàn)collect,count,toList,print才會(huì)真正執(zhí)行。

分區(qū)函數(shù)

分區(qū)函數(shù)確定了 寬窄依賴(lài),如果父RDD的key只映射到子RDD中的一個(gè)key,則是窄依賴(lài)。反之為寬依賴(lài)。

spark默認(rèn)的兩種分區(qū)函數(shù),hash分區(qū)和range分區(qū)。分區(qū)函數(shù)只能適用于<K,V>類(lèi)型的RDD,非<K,V>類(lèi)型的分區(qū)函數(shù)為None

val partitions = sc.textFile("/home/.../.../test/log",2);
partitions.partitioner
res0: None
val new_partitions = partitions.map(x,x).groupByKey(new HashPartitioner(3))
Paste_Image.png

回顧前面的知識(shí),RDD的分區(qū)如何被找到呢?
在一個(gè)DAG執(zhí)行過(guò)程中,一般從HDFS文件作為出發(fā)點(diǎn),集合函數(shù)在dadanode上執(zhí)行,如果執(zhí)行完生成新的RDD分區(qū)還在本機(jī),則下一個(gè)集合函數(shù)繼續(xù)在本機(jī)上執(zhí)行,如果生成的RDD分區(qū)部分(或全部)不再本機(jī)上了,集合函數(shù)將在其他機(jī)器上執(zhí)行,是如何做到跟蹤的呢?

val location = rdd.preferredLocations(rdd.dependecies(0))

首選位置函數(shù)顯示的知道了rdd的分區(qū)位置,底層具體怎么實(shí)現(xiàn),便不知了。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容