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


Python PySpark DataFrame coalesce方法用法及代碼示例


PySpark DataFrame 的 coalesce(~) 方法在不進行混洗的情況下減少了 PySpark DataFrame 的分區數量。

參數

1. num_partitions | int

將 PySpark DataFrame 的數據分割成的分區數。

返回值

一個新的 PySpark 數據幀。

例子

考慮以下PySpark DataFrame:

df = spark.createDataFrame([["Alex", 20], ["Bob", 30], ["Cathy", 40]], ["name", "age"])
df.show()



+-----+---+
| name|age|
+-----+---+
| Alex| 20|
|  Bob| 30|
|Cathy| 40|
+-----+---+

默認分區數量由您的 PySpark 配置決定。就我而言,默認分區數是:

df.rdd.getNumPartitions()



8

我們可以使用底層 RDD 的 glom() 方法查看 PySpark DataFrame 每個分區的實際內容:

df.rdd.glom().collect()



[[],
 [],
 [Row(name='Alex', age=20)],
 [],
 [],
 [Row(name='Bob', age=30)],
 [],
 [Row(name='Cathy', age=40)]]

我們可以看到我們確實有 8 個分區,其中 3 個包含 Row

在不進行混洗的情況下減少 PySpark DataFrame 的分區數量

要減少 DataFrame 的分區數量而不進行混排,請使用 coalesce(~)

df_new = df.coalesce(2)
df_new.rdd.glom().collect()



[[Row(name='Alex', age=20)],
 [Row(name='Bob', age=30), Row(name='Cathy', age=40)]]

在這裏,我們可以看到我們現在隻有 2 個分區!

注意

方法 repartition(~) coalesce(~) 都用於更改分區數量,但這裏有一些顯著差異:

  • repartition(~) 通常會導致洗牌操作,而 coalesce(~) 則不會。這意味著 coalesce(~) 的成本低於 repartition(~) ,因為數據不必在工作節點之間傳輸太多。

  • coalesce(~)專門用於減少分區數量。

相關用法


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