Spark AQE (Adaptive Query Execution,自适应查询执行) 是 Spark 3.0 引入的一项革命性功能(在 Spark 3.2 中默认开启),旨在解决传统静态优化器(Static Optimizer)无法解决的性能瓶颈。 简单来说,AQE 允许 Spark 在运行时(Runtime)根据实际的统计数据动态调整执行计划,而不是仅仅依赖于执行前的静态统计估算。 以下是关于 AQE 的深度解析,包括其核心功能、工作原理和配置方法。 --- 1. 为什么需要 AQE? 在 AQE 出现之前,Spark 使用 Catalyst 优化器生成物理执行计划。这是一个基于成本的优化器(CBO),它依赖于表及其列的统计信息(如行数、最大值、最小值等)。 传统 CBO 的痛点: 统计信息过时或缺失: 如果数据变化快,统计信息可能不准确。 中间结果难以估算: 经过复杂的过滤(Filter)和聚合(Aggregation)后,Spark 很难准确预测中间数据集的大小。 黑盒执行: 一旦计划生成并开始执行,即使发现某个阶段的数据量远超预期,Spark 也只能硬着头皮按原计划跑...