尽管已预先排序分桶表,但连接中的 Spark 排序操作

问题描述 投票:0回答:1

我正在使用 Spark,在连接两个预排序和分桶表期间遇到意外的排序操作。两个表均使用相同数量的存储桶创建,并按连接键排序。但是,当我执行连接操作时,Spark 的执行计划中仍然包含排序步骤。

这是我的 Spark SQL 查询的简化版本:

SELECT a.*, b.*
FROM tableA a
JOIN tableB b ON a.joinKey = b.joinKey

tableA
tableB
都按
joinKey
进行存储和排序。尽管如此,执行计划仍包含排序操作:

*(1) Sort [joinKey#1 ASC NULLS FIRST], false, 0
...
*(2) Sort [joinKey#2 ASC NULLS FIRST], false, 0

我希望 Spark 通过利用现有的排序顺序来优化连接,而不需要额外的排序步骤。这是特别令人惊讶的,因为没有数据倾斜,并且表格分布良好。

在此输入图片描述

apache-spark shuffle bucket
1个回答
0
投票

解决了。 Spark.sql.legacy.bucketedTableScan.outputOrdering = true;

© www.soinside.com 2019 - 2024. All rights reserved.