當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python PySpark RDD repartition方法用法及代碼示例

PySpark RDD 的repartition(~) 方法將 RDD 拆分為指定數量的分區。

注意

當我們第一次創建 RDD 時,它們已經在底層進行了分區,這意味著所有 RDD 都已經分區了。此方法稱為 repartition(~) (重點是 re ),因為我們正在更改現有分區。

參數

1. numPartitions | int

用於拆分 RDD 的分區數。

返回值

PySpark RDD (pyspark.rdd.RDD)。

例子

將 RDD 重新分區為一定數量的分區

考慮以下 RDD:

rdd = sc.parallelize(["A","B","C","A","A","B"], numSlices=3)
rdd.collect()



['A', 'B', 'C', 'A', 'A', 'B']

在這裏,我們使用 parallelize(~) 方法創建一個具有3個分區的RDD。

我們可以使用 glom() 方法來查看分區的實際內容:

rdd.glom().collect()



[['A', 'B'], ['C', 'A'], ['A', 'B']]

將 RDD 重新分區為 2 個分區:

new_rdd = rdd.repartition(2)
new_rdd.glom().collect()



[['A', 'B', 'A', 'B'], ['C', 'A']]

請注意,即使我們重新分區 RDD:

  • 相同的值不一定會出現在同一個分區中('A' 可以在兩個分區中找到)

  • 每個分區中的元素數量也可能不平衡 - 這裏我們第一個分區中有 4 個元素,而第二個分區中隻有 2 個元素。

警告

repartition(~) 方法涉及混洗,即使減少分區數量也是如此。為了避免減少分區數量時出現混洗,請改用 RDD 的 coalesce(~) 方法。

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 PySpark RDD | repartition method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。