1

我的代码就像

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 节点?

谢谢

4

0 回答 0