Apache Spark任务数小于分区数问题咨询
Spark df.count()任务数少于分区数的原因及解决办法
问题相关截图


核心原因:自适应查询执行(AQE)的自动合并优化
Databricks社区版默认开启了自适应查询执行(Adaptive Query Execution,AQE),当Spark检测到小分区时,会自动合并这些分区以减少任务数量、降低调度开销。你通过repartition(10)设置了10个分区,但由于range(1000)生成的数据量极小,每个分区仅包含少量数据,AQE触发了分区合并逻辑,最终执行count时的任务数被压缩到更少的数量。
验证与解决方法
- 关闭AQE验证:在执行DataFrame创建代码前,添加以下配置关闭自适应优化,再次运行count操作,任务数就会和分区数一致:
spark.conf.set("spark.sql.adaptive.enabled", "false") - 确认实际分区数:可以通过
df.rdd.getNumPartitions查看DataFrame的实际分区数量,对比Spark UI中的任务数,验证是否由AQE导致分区合并。
补充说明
即使是窄依赖操作,Spark优化器也会根据数据实际情况动态调整执行计划。当分区数据量过小的时候,合并分区是合理的性能优化策略,能避免大量小任务带来的调度资源浪费。
内容的提问来源于stack exchange,提问作者Sree Sanjeev Kandasamy Gokulra
相关产品推荐
相关产品推荐

