我有两个数据文件,比如sDF (小尺寸)和bDF (大尺寸)。我正在尝试使用BroadCastJoin加入他们。我调用了星火外壳
--conf spark.sql.autoBroadcastJoinThreshold=10737418240
并通过查询验证相同:
scala> (spark.conf.get("spark.sql.autoBroadcastJoinThreshold").toLong)/1024/1024
res11: Long = 10240
较小尺寸的dataframe (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完整的细节可以看到这里
大尺寸数据挖掘(BDF)有以下信息:
scala>bDF.groupBy(spark_partition_id).count.show(10000, false)
+--------------------+--------+
|SPARK_PARTITION_ID()|count |
+--------------------+--------+
|148 |52996917|
|31 |52985656|
|137 |52991784|
|85 |52990666|
....
bDF完整的细节可以看到这里
现在在这两种情况下:
- bDF.join(sDF, ..., "inner")
- bDF.join(broadcast(sDF), ..., "inner")
我总是让SortMergeJoin解释。如何将其更改为广播连接?
火花版本: 2.2.1
发布于 2019-09-17 23:52:29
为了强制广播连接,请禁用SortMergeJoin
spark.conf.set("spark.sql.join.preferSortMergeJoin", false)
https://stackoverflow.com/questions/57774853
复制相似问题