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 預設分割槽數 ...