回傳一個新的 DataFrame,裡面有完全不同的 numPartitions 分割區。
語法
coalesce(numPartitions: int)
參數
| 參數 | 類型 | 說明 |
|---|---|---|
numPartitions |
int | 指定目標分區數量。 |
退貨
DataFrame
Notes
類似於 RDD 上定義的 coalesce,此操作產生狹窄依賴關係,例如從 1000 個分割區增加到 100 個分割區,不會有洗牌,而是每個 100 個新分割區會佔用 10 個現有分割區。 如果請求的分割區數量增加,則會維持在目前的分割區數。
然而,如果你做的是大幅合併,例如將 numPartitions = 1,可能會導致計算在比你想要的節點數量少(例如 numPartitions = 1 的情況下,只有一個節點)。 為了避免這種情況,你可以呼叫 repartition()。 這會增加一個洗牌步驟,但代表目前的上游分割區會平行執行(依照目前的分割方式)。
Examples
from pyspark.sql import functions as sf
spark.range(0, 10, 1, 3).coalesce(1).select(
sf.spark_partition_id().alias("partition")
).distinct().sort("partition").show()
# +---------+
# |partition|
# +---------+
# | 0|
# +---------+