大表与大表之间的sort merge join原理:
当两个表都非常大时,spark SQL采用Sort Merge Join进行Join,这种实现方式不用将一侧数据全部加载后再进行join,但需要在join前将数据排序。
首先将两张表按照join key进行了重新shuffle,保证join keys值相同的记录会被分在相同的分区。
分区后对每个分区内的数据进行排序,排序后再对相应的分区内的记录进行连接。
因为两个序列都是有序的,从头遍历,碰到key相同的就输出;如果不同,左边小就继续取左边,反之取右边。
可以看出,无论分区有多大,Sort Merge Join都不用把某一侧的数据全部加载到内存中,而是即用即丢,从而大大提升了大数据量下SQL JOIN的稳定性。
Spark两个大表join,分布式处理内部如何实现
最新推荐文章于 2025-01-11 18:21:38 发布