数据分析中将两个数据集进行 Join 操作是很常见的场景。在 Spark 的物理计划阶段,Spark 的 Join Selection 类会根 据 Join hints 策略、Join 表的大小、 Join 是等值 Join 还是不等值以及参与 Join 的 key 是否可以排序等条件来选择最 终的 Join 策略,最后 Spark 会利用选择好的 Join 策略执行最终的计算。当前 Spark 一共支持五种 Join 策略:
Broadcast hash join (BHJ)Shuffle hash join(SHJ)Shuffle sort merge join (SMJ)Shuffle-and-replicate nested loop join,又称笛卡尔积(Cartesian product join)Broadcast nested loop join (BNLJ)
其中 BHJ和 SMJ这两种 Join 策略是我们运行 Spark 作业最常见的。JoinSelection会先根据 Join的 Key 为等值 Join 来选择Broadcast hash join、Shuffle hash join 以及Shuffle sort merge join 中的一个;如果 Join 的 Key 为不等值 Join 或者没有指定 Join 条件,则会选择 Broadcast nested loop join 或 Shuffle-and-replicate nested loop join。 不同的 Join 策略在执行上效率差别很大,了解每种 Join 策略的执行过程和适用条

本文详细介绍了Spark的大数据开发中五种Join策略:Broadcast Hash Join、Shuffle Hash Join、Shuffle Sort Merge Join、Cartesian product join和Broadcast nested loop join。Broadcast Hash Join适用于小表,避免Shuffle操作;Shuffle Hash Join和Sort Merge Join适用于大规模数据,前者基于Hash,后者基于排序;Cartesian product join在无连接条件时产生;Broadcast nested loop join效率较低,但支持所有Join类型。
最低0.47元/天 解锁文章
1249

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



