其他更多java基礎文章:
java基礎學習(目錄)
這部分能力有限,所以推薦一些大神文章閱讀學習:
-
Spark 建立RDD、DataFrame各種情況的預設分割槽數:這篇通過例項非常全的測試了各種情況下的預設分割槽數
-
Spark RDD之Partition:這篇通過程式碼講解了分割槽的邏輯、決定partition數量的因素、Partition數量影響及調整。
-
spark中repartition和partitionBy的區別、spark中reparation和coalesce的用法和區別:通過原始碼講解repartition,partitionBy,coalesce
總結
我在以我的理解簡單的概括下,如有不對,希望大家及時斧正:
- Task和Partition是一一對應的
- 通過
spark.default.parallelism
設定sc.defaultParallelism
的值 sc.defaultMinPartitions=min(sc.defaultParallelism,2)
。也就是sc.defaultMinPartitions
只有兩個值1和2,當sc.defaultParallelism>1時值為2,當sc.defaultParallelism=1時,值為1- sc.parallelize(…)的預設Partition值是
sc.defaultParallelism
的值 - sc.textFile(…)如果不傳Partition值,絕大多數則為HDFS中Block的數量。原因是
partition = max(hdfs檔案的block數目, sc.defaultMinPartitions)
,由於sc.defaultMinPartitions只能是1或2。- 如果hdfs檔案block數量大於1時,Partition數目就是block數目。
- 如果hdfs檔案block數量等於1時,預設分割槽數為sc.defaultMinPartitions,只可能是1或2。當用引數指定分割槽數時,rdd的分割槽數大於等於引數值,本次測試為等於引數值或引數值+1
本地檔案
也會像hdfs一樣進行類似於block的劃分,固定按32M來分片。分割槽數 = max(本地檔案的block數目, 引數值)- 從
關係型資料庫表
讀取的df的分割槽數為1 - 讀取
hive表
建立的DataFrame的分割槽數,block數為hive表對應的hdfs檔案的block的數目,當sc.defaultParallelism大於block時,df的分割槽是等於sc.defaultParallelism,當小於block時,df的分割槽數介於sc.defaultParallelism和block之間