SparkSQL中shuffle时,Spark如何决定下一阶段的分区数量?

0 人关注

当然,我知道 spark.sql.shuffle.partitions 配置。
但是,例如,当我在只有200行的小数据集上设置300这个配置时,这个配置是无效的,实际的分区数只有2。
再比如,我在有300亿行的数据集上设置了3000这个配置,这个配置也是无效的,实际分区数只有600。
我们看到,当我们在一个小的数据集上设置一个大的分区配置值时,这个配置是无效的。
所以我只想知道,在SparkSQL的shuffle中,Spark是如何决定下一阶段的分区数的?或者如何强制这个配置是有效的?
我的SparkSQL就像下面这样。

set spark.sql.shuffle.partitions=3000;
with base_data as (
select 
    device_id
   table_name
where
    dt = '20210621'
distribute by
    rand()
select count(1) from base_data
    
3 个评论
如果你决定不设置 spark.sql.shuffle.partitions ,Spark使用默认=200。 spark.apache.org/docs/latest/sql-performance-tuning.html
@mazaneicha 我已经更新了我的答案,请再看看,谢谢
你能不能在你的问题中也添加一个 explain 的输出?
apache-spark
apache-spark-sql
Shawn.X
Shawn.X
发布于 2021-06-30
1 个回答
sandeep rawat
sandeep rawat
发布于 2021-07-01
0 人赞同

一般来说,狭义转换不改变分区的数量。

广义转换不改变分区的数量。