![](/img/trans.png)
[英]spark.sql.shuffle.partitions local spark performance behavior
[英]Difference in Spark SQL Shuffle partitions
我試圖了解 Spark Sql Shuffle Partitions 默認設置為 200。 數據如下所示,后面是為這兩種情況創建的分區數。
scala> flightData2015.show(3)
+-----------------+-------------------+-----+
|DEST_COUNTRY_NAME|ORIGIN_COUNTRY_NAME|count|
+-----------------+-------------------+-----+
| United States| Romania| 15|
| United States| Croatia| 1|
| United States| Ireland| 344|
+-----------------+-------------------+-----+
scala> println(flightData2015.sort("DEST_COUNTRY_NAME").rdd.getNumPartitions)
104
scala> println(flightData2015.groupBy("DEST_COUNTRY_NAME").count().rdd.getNumPartitions)
200
這兩種情況都會導致一個 Shuffle 階段,這應該會產生 200 個分區(默認值)。 有人可以解釋為什么有區別嗎?
這兩種情況的區別在於sort
和groupBy
在底層使用了不同的分區器。
groupBy
- 使用hashPartitioning
這意味着它計算密鑰的 hash 然后它計算pmod
200(或任何設置為隨機分區的數量)所以它總是會創建 200 個分區(即使其中一些可能是空的)sort
/ orderBy
- 正在使用rangePartitioning
,這意味着它運行一個單獨的作業來對數據進行采樣,並在此基礎上為分區創建邊界(試圖使它們成為 200)。 現在根據采樣數據分布和實際行數,它可能會創建小於 200 的邊界,這就是您只有 104 的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.