一、如何选取到 broadcast join
Join 具有 hint 的情况会调用 createBroadcastHashJoin(onlyLookingAtHint = true)
,若 Join 没有 hint 的情况调用 createBroadcastHashJoin(onlyLookingAtHint = false)
![](https://img.haomeiwen.com/i204749/fbd0138cc1eee995.png)
二、BroadcastHashJoinExec
执行两个子 relation 的 inner hash join。 构造此运算符的输出 RDD 时,将异步启动一个 Spark 作业来计算 broadcast relation 的值。 然后,此数据将放置在 Spark 广播变量中。 streamed relation 不需要 shuffle。
2.1、执行原理
BroadcastHashJoinExec#doExecute()
![](https://img.haomeiwen.com/i204749/e6d83100be72961e.png)
2.2、Broadcast Join 物理执行计划及最终执行计划
![](https://img.haomeiwen.com/i204749/0bb9611f2e5ae409.png)
2.3、broadcast 执行原理
![](https://img.haomeiwen.com/i204749/ed0cbcb4f146596c.png)
三、ShuffledHashJoinExec
3.1、如何选取到 shuffle hash join
![](https://img.haomeiwen.com/i204749/1ddee44b9f36b099.png)
3.2、Shuffle Hash Join 物理执行计划及最终执行计划
![](https://img.haomeiwen.com/i204749/667cc88069048a00.png)
3.3、执行原理
ShuffleHashJoinExec#doExecute()
![](https://img.haomeiwen.com/i204749/4cba955a63df37ea.png)
网友评论