我有两个数据框,例如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
答案 0 :(得分:0)
为了强制广播加入,请使用
禁用SortMergeJoin spark.conf.set("spark.sql.join.preferSortMergeJoin", false)