Spark學習——分割槽Partition數

Hiway發表於2019-04-03

其他更多java基礎文章:
java基礎學習(目錄)


這部分能力有限,所以推薦一些大神文章閱讀學習:

總結

我在以我的理解簡單的概括下,如有不對,希望大家及時斧正:

  • 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之間

Spark學習——分割槽Partition數

相關文章