【发布时间】:2021-07-01 11:17:08
【问题描述】:
我当然知道spark.sql.shuffle.partitionsconfig,
但例如,当我在只有 200 行的小数据集上设置此配置 300 时,配置无效,实际分区号仅为 2,
另一个例子,我在有 300 亿行的数据集上设置了这个配置 3000,配置也无效,实际分区号只有 600,
我们看到,当我们在小数据集上设置大值分区配置时,配置将无效,
所以我只想知道在SparkSQL中shuffle时Spark如何决定下一阶段的分区数?或者如何强制此配置有效?
我的 Spark SQL 如下所示:
set spark.sql.shuffle.partitions=3000;
with base_data as (
select
device_id
from
table_name
where
dt = '20210621'
distribute by
rand()
)
select count(1) from base_data
【问题讨论】:
-
如果您决定不设置
spark.sql.shuffle.partitions,Spark 使用默认值 = 200。spark.apache.org/docs/latest/sql-performance-tuning.html -
@mazaneicha 我已经更新了我的答案,请再看一遍,谢谢
-
能否将
explain的输出也添加到您的问题中?
标签: apache-spark apache-spark-sql