Spark join中,如果小表足够小,可以先缓存到内存,使用Broadcast Hash join。
原理是将小表聚合到driver端,再广播到各大表分区,进行join时,大表的各个分区与小表进行本地join,规避shuffle。
自动广播
参数
spark.sql.autoBroadcastJoinThreshold
默认值
10 * 1024 * 1024
10M,默认开启,禁用赋值-1
举例
广播前
代码
执行计划
执行10s
有shuffle
sortMergeJoin
广播后
代码
执行计划
执行62ms
无shuffle
BroadcastHashJoin
强行广播
虽然参数关闭啦,但是有以下几个方式,强行广播,略略略~~