You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Spark调整Join或GroupBy后的输出分区数量?

配置AQE使Shuffle分区大小不超过100MB的方法

可以通过组合配置以下AQE相关参数,实现全程控制Shuffle分区大小不超过100MB:

  • spark.sql.adaptive.advisoryPartitionSizeInBytes:设置为104857600(即100MB),该参数是AQE调整分区的核心参考阈值。需要纠正一个认知偏差:它并非只对第一次Shuffle生效,后续Shuffle阶段只要触发AQE的分区调整逻辑,这个阈值就会正常发挥作用。
  • spark.sql.adaptive.coalescePartitions.enabled:确保设置为true(默认值即为true),开启AQE的分区合并/拆分功能。当Shuffle后分区大小超过阈值时,AQE会自动尝试拆分分区(数据可拆分前提下);当分区过小时则会合并,平衡并行度与分区大小。
  • spark.sql.adaptive.optimizeSkewedJoin.enabled:设置为true,若存在数据倾斜导致部分分区远超100MB的情况,AQE会自动识别并拆分倾斜分区,强制将单分区大小控制在阈值范围内。
  • spark.sql.adaptive.coalescePartitions.minPartitionNum:可根据集群核心数设置最小分区数,避免分区合并后并行度过低。比如集群有8个核心,可设置为8。

另外补充说明:spark.sql.shuffle.partitions在AQE启用时并非完全无效,它是Shuffle初始分区数的基准值,AQE会基于这个初始值结合advisoryPartitionSizeInBytes调整最终分区数;后续Shuffle阶段也不会直接用核心数作为默认分区数,核心数只是spark.sql.adaptive.coalescePartitions.minPartitionNum的默认值(未显式设置时),但这和分区大小控制逻辑不冲突,只要分区超100MB就会触发拆分。

完整配置示例:

spark.sql.adaptive.enabled=true
spark.sql.adaptive.advisoryPartitionSizeInBytes=104857600
spark.sql.adaptive.coalescePartitions.enabled=true
spark.sql.adaptive.optimizeSkewedJoin.enabled=true
spark.sql.adaptive.coalescePartitions.minPartitionNum=8

内容的提问来源于stack exchange,提问作者Rinat Veliakhmedov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:12:07