分割槽介紹

RDD 如何分割槽?

預設情況下,為每個 HDFS 分割槽建立一個分割槽,預設情況下為 64MB。在這裡閱讀更多。

如何跨分割槽平衡我的資料?

首先,看看可以重新分配資料的三種方式 :

  1. 將第二個引數 RDD 的所需最小分割槽數) 傳遞給 textFile() ,但要小心:

    在[14]中:lines = sc.textFile(data

    在[15]中:lines.getNumPartitions()Out [15]:1000

    在[16]中:lines = sc.textFile(data,500)

    在[17]中:lines.getNumPartitions()Out [17]:1434

    在[18]中:lines = sc.textFile(data,5000)

    在[19]中:lines.getNumPartitions()Out [19]:5926

正如你所看到的,[16] 沒有達到預期的效果,因為 RDD 具有的分割槽數量已經大於我們請求的最小分割槽數量。

  1. 使用 repartition() ,如下所示:

    在[22]中:lines = lines.repartition(10)

    在[23]中:lines.getNumPartitions()Out [23]:10

警告:這將呼叫隨機播放,並且當你想要增加 RDD 具有的分割槽數時應該使用它。

來自文件

隨機播放是 Spark 的重新分配資料的機制,因此它可以跨分割槽進行不同的分組。這通常涉及跨執行程式和機器複製資料,使得混洗成為複雜且昂貴的操作。

  1. 使用 coalesce() ,如下所示:

    在[25]中:lines = lines.coalesce(2)

    在[26]中:lines.getNumPartitions()Out [26]:2

在這裡,Spark 知道你會縮小 RDD 並獲得它的優勢。閱讀有關 repartition()vs coalesce()更多資訊。

但這一切能否保證你的資料在你的分割槽中完美平衡?不是真的,因為我在如何跨分割槽平衡資料方面經驗豐富