SortMergeJoin不会更改为广播加入

时间:2019-09-03 15:36:12

标签: apache-spark apache-spark-sql

我有两个数据框,例如sDF(小尺寸)和bDF(大尺寸)。我正在尝试使用BroadCastJoin加入他们。 我使用

调用了spark shell
--conf spark.sql.autoBroadcastJoinThreshold=10737418240

,并通过查询进行验证:

scala> (spark.conf.get("spark.sql.autoBroadcastJoinThreshold").toLong)/1024/1024
res11: Long = 10240

较小的尺寸数据框(sDF)具有以下信息:

scala> sDF.count
res14: Long = 419
scala> sDF.groupBy(spark_partition_id).count.show(1000, false)
+--------------------+-----+
|SPARK_PARTITION_ID()|count|
+--------------------+-----+
|148                 |3    |
|31                  |3    |
......

sDF的完整详细信息可见here

大尺寸数据框(bDF)具有以下信息:

scala>bDF.groupBy(spark_partition_id).count.show(10000, false)
+--------------------+--------+
|SPARK_PARTITION_ID()|count   |
+--------------------+--------+
|148                 |52996917|
|31                  |52985656|
|137                 |52991784|
|85                  |52990666|
....

可以看到here

完整的bDF详细信息

现在在两种情况下:

- bDF.join(sDF, ..., "inner")
- bDF.join(broadcast(sDF), ..., "inner")

我总是得到 SortMergeJoin 的解释。如何将其更改为广播加入?

火花版本:2.2.1

1 个答案:

答案 0 :(得分:0)

为了强制广播加入,请使用

禁用SortMergeJoin
 spark.conf.set("spark.sql.join.preferSortMergeJoin", false)