对于spark sql中三种join方式的通俗总结

浅析spark中的三种join方式:
1、broadcast join:
适用于小表与大表的join,其中小表小于10M,本质上是去用空间换时间,
也就是将小表发送到每个大表对应的节点上,然后依次去遍历大表中的每个关联键去和对应小表中的关联键去匹配,找到相等的进行关联,并不会走shuffle过程,因此最终的文件数取决于block的个数,每个bolck是一个逻辑上的概念,
生成的规则是在建表并落HDFS文件的时候按256M去拆分,得到最终的文件数。
2、shuffle hash join
适合于没有特别小的两个表进行关联的时候,默认设置的shuffle partition的个数
是200,也就是分了200个区,然后两张表的key值分别去基于200做hash取余然后散步在每个区域中了,这样的思想先把相近的合并在一个区内,再在每个分区内去做比较key值的等值比较,就避免了大范围的遍历比较,节省了时间和内存。
3、sort merge join
这种适用于关联的两张表都特别大时,使用上述的两种方法加载到内存的时候对于内存的压力都非常大时,因此在2方法的基础上,hash取余之后还要分别对两张表的key值进行排序,这样去做等值比较的时候就不需要将某一方的全部数据都加载到内存进行计算了,只需要取一部分就能知道是否有相等的(比如按升序排列,某个值明显比它大了,后面肯定就不会有相等的,就不用继续比较了,节省了时间和内存),也就是在进行等值比较的时候即用即丢的。这个方法在前面进行排序的时候可能会消耗点时间,但相对于后面的时间来说,总体是大大节省了时间。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值