大数据开发-Spark 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类型。

数据分析中将两个数据集进行 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)

其中 BHJSMJ这两种 Join 策略是我们运行 Spark 作业最常见的。JoinSelection会先根据 Join的 Key 为等值 Join 来选择Broadcast hash joinShuffle hash join 以及Shuffle sort merge join 中的一个;如果 Join 的 Key 为不等值 Join 或者没有指定 Join 条件,则会选择 Broadcast nested loop joinShuffle-and-replicate nested loop join。 不同的 Join 策略在执行上效率差别很大,了解每种 Join 策略的执行过程和适用条

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值