-1

我正在查看代碼中的數據幀已被拆分成超出所需(超過700)的太多分區的代碼中的錯誤,並且當我嘗試時會導致太多的洗牌操作將它們重新分配到只有48個。我不能在這裏使用coalesce(),因爲在重新分區之前,我想首先擁有更少的分區。轉換後保留火花數據幀的分區數

我正在尋找減少分區數量的方法。比方說,我有一個火花數據框(有多列)分爲10個分區。我需要根據其中一列進行orderBy轉換。完成此操作後,生成的數據幀是否具有相同數量的分區?如果不是,火花將如何決定分區的數量?

此外,除了像repartition()這樣的明顯特性之外,還有哪些其他轉換可能會導致數據框的分區數發生變化,這是我需要注意的嗎?

回答

0

需要交換操作的分區數量由spark.sql.shuffle.partitions定義。如果你想要一個特定的值,你應該在執行命令之前設置它:

scala> val df = spark.range(0, 1000) 
df: org.apache.spark.sql.Dataset[Long] = [id: bigint] 

scala> spark.conf.set("spark.sql.shuffle.partitions", 1) 

scala> df.orderBy("id").rdd.getNumPartitions 
res1: Int = 1 

scala> spark.conf.set("spark.sql.shuffle.partitions", 42) 

scala> df.orderBy("id").rdd.getNumPartitions 
res3: Int = 42