我的代码就像
sql = '''
SELECT ...
FROM a
LEFT JOIN b ON ...
LEFT JOIN c ON ...
LEFT JOIN d ON ...
'''
df = spark.sql(sql)
(df
.repartition('col')
.write
.format('parquet')
.mode('overwrite')
.partitionBy('col')
.option(...)
.saveAsTable('...')
)
最终计划显示 2 个广播连接和 1 个 SortMergeJoin。SortMergeJoin 是 100+ 到 200+ 百万行表之间的 LEFT JOIN。而且它有偏差。我的问题是我启用了 AQE,并使用了一些配置(例如使用 spark.sql.shuffle.partitions=40000、spark.default.parallelism=400),但我没有看到 AQE 合并,也没有看到 AdaptiveSparkPlan 节点。我看到很多 AQE 的例子都是使用 GROUP BY。AQE 是否仅适用于 GROUP BY?为什么我的查询没有显示 AdaptiveSparkPlan 节点?
谢谢