Spark join中,如果小表足够小,可以先缓存到内存,使用Broadcast Hash join。
原理是将小表聚合到driver端,再广播到各大表分区,进行join时,大表的各个分区与小表进行本地join,规避shuffle。
自动广播
参数
spark.sql.autoBroadcastJoinThreshold
默认值
10 * 1024 * 1024
10M,默认开启,禁用赋值-1
举例
广播前
代码

执行计划

执行10s

有shuffle


sortMergeJoin
广播后
代码
执行计划

执行62ms

无shuffle


BroadcastHashJoin
强行广播

虽然参数关闭啦,但是有以下几个方式,强行广播,略略略~~
SQL Hint方式
代码

执行计划



API方式
代码

执行计划


298

被折叠的 条评论
为什么被折叠?



