原理:
问题点
1、参数设置:
spark.sql.adaptive.join.enabled
| AE 相关,开启后能够根据数据量自动判断能否将 sortMergeJoin 转换成 broadcast join | true |
spark.sql.broadcastTimeout | broadcast joins 时,广播数据最长等待时间,网络不稳定时,容易出现超时造成任务失败,可适当增大此参数 | 300(单位:s) |
spark.sql.autoBroadcastJoinThreshold | 表能够使用 broadcast join 的最大阈值
| 20971520(20MB) |
2、当广播变量的表为1G,但是子查询之后为1M,这样还能广播出去吗?(sortMergeJoin 转换成 broadcast join)
B表为1G,但是筛选之后为1M。
答案:不能。
select
a.id,
ss.name
from
A
left join
(
select
id,
name
from
B
where
id < 100
) s
on a.id = ss.id
验证一下。抽时间再补上。