AQE - Adaptive Query Execution
作为工程师,当我们谈论Spark/Databricks时,我们可能会忽略一些事情:
如果您使用coalesce()
AQE 来减少分区,AQE 将不会对其进行任何操作。它不会检测倾斜,不会重新分区,也不会进行优化。因为它coalesce()
不会执行完全重排(例如repartition()
),而是合并现有分区而不进行重新分配。这就是数据倾斜会在之后悄然出现coalesce()
并中断或减慢作业速度的原因。我发现文档有点不清楚。AQE 会在您执行触发repartition()
完全重排的操作后进行干预。这是正确的理解吗?文档似乎对这种情况不太清楚。
是的,你的断言/问题是正确的。
Coalesce(n)
并不像repartition(n)
您所说的那样,会导致大范围/完全的改组。这是一种合并。因此,没有信号发送给 Catalyst 进行运行时优化以查看是否
AQE
可以应用 - 因为没有检测到完整的改组,这可以作为优化、调用的先决条件AQE
。JOIN
s 和groupBy()
其他前兆。注意:存在一些移动,因此需要重新分配数据
coalesce(n)
。