Spark 的三种join方式

参考博客:https://www.cnblogs.com/duodushuduokanbao/p/9911256.html

Spark的join实现方案有三种:

  • broadcast hash join
  • shuffle hash join
  • sort-merge join

hash join

确定 小表(Bulid Table) 和 大表(Probe Table),利用小表 根据 key 进行hash,建立hash table,大表同样对key进行相同的hash,映射hash table中的记录,如果映射成功且join条件符合,则将数据进行关联。

为什么 bulid table 选择小表, probe table 选择大表? 因为在构建 hash table 时最好能将其全部加载到内存,这样才效率最高,这也说明了为什么 hash join 算法只适合至少有一个小表的场景,对于两个大表的join 场景并不适用,两个大表的 join ,可选用 sort merge join。

hash join主要针对单机,以下两种是对hash join的分布式改造后

Broadcast join

一般用于维表和实时表进行join,可将维表(一般不超过10M)发送至各个节点,使各个节点都存有一份完整的维表数据,接下来相当于单机进行hash join。

SparkSQL 也可以根据内存资源、带宽资源适量将参数 spark.sql.autoBroadcastJoinThreshold(默认是 10M) 调大,让更多 join 实际执行为 broadcast hash join。

shuffle join

当join的两张表数据量都很大时,利用 key相同的数据将会被分到相同分区上 的原理,将两张表按key进行分区,使相同key的记录分到同一个节点上,然后在对每个节点上的数据进行hash join

sort-merge join(没太理解)

和shuffle join一样,将两张大表join key进行重分区,对每个分区的节点进行排序,然后对排好序的表进行join,join的操作:分表遍历两个有序序列,碰到相同的key就merge然后输出

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值