Spark两个大表join,分布式处理内部如何实现

SparkSQL在处理大表Join时采用SortMergeJoin,通过先分区再排序的方式,避免一次性加载所有数据。这种方法保证了在大数据量下的JOIN操作稳定且内存效率高,即用即丢策略提升了性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大表与大表之间的sort merge join原理:


当两个表都非常大时,spark SQL采用Sort Merge Join进行Join,这种实现方式不用将一侧数据全部加载后再进行join,但需要在join前将数据排序。


首先将两张表按照join key进行了重新shuffle,保证join keys值相同的记录会被分在相同的分区。


分区后对每个分区内的数据进行排序,排序后再对相应的分区内的记录进行连接。


因为两个序列都是有序的,从头遍历,碰到key相同的就输出;如果不同,左边小就继续取左边,反之取右边。


可以看出,无论分区有多大,Sort Merge Join都不用把某一侧的数据全部加载到内存中,而是即用即丢,从而大大提升了大数据量下SQL JOIN的稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值