spark 的RDD分割槽

2021-10-10 05:30:09 字數 1807 閱讀 6617

rdd的倆種建立方

1.從集合中建立rdd,spark主要提供了兩種函式:parallelize和makerdd

使用parallelize()從集合建立

scala> val rdd = sc.parallelize(array(1,2,3,4,5,6,7,8))

使用makerdd()從集合建立

scala> val rdd1 = sc.makerdd(array(1,2,3,4,5,6,7,8))

2.由外部儲存系統的資料集建立rdd

包括本地的檔案系統,還有所有hadoop支援的資料集,比如hdfs、cassandra、hbase等

val rdd2= sc.textfile("hdfs://hadoop102:9000/release")
倆種建立方式rdd的分割槽規則1.集合中建立rdd時候,rdd的分割槽規則

val rdd1 = sc.makerdd(array(1,2,3,4,5,6,7,8)) 底層原始碼:

numslice呼叫的是defaultparallism方法的,defaultparallism方法返回的是taskscheduler.defaultparallelism

defaultparallelism底層具體實現如下:

totalcorecount: 所有excutor的核數,比如當前的是8

則math.max(totalcorecount.get(),2)=math.max(8,2)=8,則此時rdd的分割槽數為8

getint() 方法如下:

總結:從集合中建立rdd時候,rdd的分割槽規則就是math.max(excutors的總核數,2)

2…由外部儲存系統的資料集建立rdd時候rdd的分割槽規則

val rdd2= sc.textfile(「hdfs://hadoop102:9000/release」)

textfile預設回有minpartition引數,該引數是defaultminpartition方法返回值

defaultminpartition方法是math.min(defaultparallelism,2)

defaultparallelism 第一方式中已經計算出來是math.max(excutors的總核數,2)

所以minpartition = math.min(math.max(excutors的總核數,2),2)

總結 由外部儲存系統的資料集建立rdd時候rdd的分割槽規則如下:

minpartition = math.min(math.max(excutors的總核數,2),2)

但是這個是最小分割槽數不是真實分割槽數

Spark中RDD分割槽以及節點

spark中rdd分割槽 對於二元rdd使用時,例如在使用join 時 我們對資料集是如何分割槽的卻一無所知。預設情況下,連線操作會將兩個資料集中的所有鍵的雜湊值都求出來,將該雜湊值相同的記錄通過網路傳到同一臺機器 上,然後在那台機器上對所有鍵相同的記錄進行連線操作,會非常消耗效能,如果乙個資料集設...

影響Spark輸出RDD分割槽的操作函式

cogroup,groupwith,join,leftouterjoin,rightouterjoin,groupbykey,reducebykey,combinebykey,partitionby,sort,mapvalues 如果父rdd存在partitioner flatmapvalues 如...

Spark中RDD的分割槽數時如何的?

看目錄可能方便val rdd sc.parallelize list,6 分割槽數 指定分割槽數 val sc new sparkcontext new sparkconf set spark.default.parallelism 10 setmaster local 4 test 預設分割槽數 ...