PySpark DataFrame 的 repartition(~)
方法返回一個新的 PySpark DataFrame,其中數據分為指定數量的分區。此方法還允許按列值進行分區。
參數
1. numPartitions
| int
分解 DataFrame 的分區數。
2. cols
| str
或 Column
用於對 DataFrame 進行分區的列。
返回值
一個新的 PySpark 數據幀。
例子
對 PySpark DataFrame 進行分區
考慮以下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
就我而言,我們的 PySpark DataFrame 默認分為 8 個分區。
我們可以看到 DataFrame 的行是如何使用底層 RDD 的 glom()
方法進行分區的:
df.rdd.glom().collect()
[[],
[],
[Row(name='Alex', age=20)],
[],
[],
[Row(name='Bob', age=30)],
[],
[Row(name='Cathy', age=40)]]
在這裏,我們可以看到確實有 8 個分區,但其中隻有 3 個分區中有Row
。
現在,讓我們重新分區 DataFrame,使行僅分為 2 個分區:
df_new = df.repartition(2)
df_new.rdd.getNumPartitions()
2
重新分區的 DataFrame 中的行分布現在是:
df_new.rdd.glom().collect()
[[Row(name='Alex', age=20),
Row(name='Bob', age=30),
Row(name='Cathy', age=40)],
[]]
如此處所示,無法保證行將均勻分布在分區中。
按列值對 PySpark DataFrame 進行分區
考慮以下PySpark DataFrame:
df = spark.createDataFrame([("Alex", 20), ("Bob", 30), ("Cathy", 40), ("Alex", 50)], ["name", "age"])
df.show()
+-----+---+
| name|age|
+-----+---+
| Alex| 20|
| Bob| 30|
|Cathy| 40|
| Alex| 50|
+-----+---+
要按列 name
將此 PySpark DataFrame 重新分區為 2 個分區:
df_new = df.repartition(2, "name")
df_new.rdd.glom().collect()
[[Row(name='Alex', age=20),
Row(name='Cathy', age=40),
Row(name='Alex', age=50)],
[Row(name='Bob', age=30)]]
在這裏,請注意 name
具有相同值的行(在本例中為 'Alex'
)最終位於同一分區中。
我們還可以按多個列值重新分區:
df_new = df.repartition(4, "name", "age")
df_new.rdd.glom().collect()
[[Row(name='Alex', age=20)],
[Row(name='Bob', age=30)],
[Row(name='Alex', age=50)],
[Row(name='Cathy', age=40)]]
在這裏,我們將 name
和 age
列重新分區為 4
分區。
我們還可以通過僅指定列標簽來使用默認的分區數:
df_new = df.repartition("name")
df_new.rdd.getNumPartitions()
1
相關用法
- Python PySpark DataFrame replace方法用法及代碼示例
- Python Pandas DataFrame replace方法用法及代碼示例
- Python Pandas DataFrame reset_index方法用法及代碼示例
- Python Pandas DataFrame reorder_levels方法用法及代碼示例
- Python Pandas DataFrame resample方法用法及代碼示例
- Python Pandas DataFrame reindex方法用法及代碼示例
- Python Pandas DataFrame rename_axis方法用法及代碼示例
- Python Pandas DataFrame rename方法用法及代碼示例
- Python Pandas DataFrame rank方法用法及代碼示例
- Python Pandas DataFrame rdiv方法用法及代碼示例
- Python Pandas DataFrame radd方法用法及代碼示例
- Python PySpark DataFrame rdd屬性用法及代碼示例
- Python Pandas DataFrame rsub方法用法及代碼示例
- Python Pandas DataFrame round方法用法及代碼示例
- Python PySpark DataFrame randomSplit方法用法及代碼示例
- Python Pandas DataFrame rolling方法用法及代碼示例
- Python Pandas DataFrame rpow方法用法及代碼示例
- Python Pandas DataFrame rfloordiv方法用法及代碼示例
- Python Pandas DataFrame rtruediv方法用法及代碼示例
- Python Pandas DataFrame rmod方法用法及代碼示例
- Python Pandas DataFrame rmul方法用法及代碼示例
- Python Pandas DataFrame empty屬性用法及代碼示例
- Python Pandas DataFrame pop方法用法及代碼示例
- Python Pandas DataFrame nsmallest方法用法及代碼示例
- Python Pandas DataFrame sample方法用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 PySpark DataFrame | repartition method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。