SparkSql Join基本流程(hash join,broadcast join,shuffle hash join ,sort merge join)

本文详细介绍了SparkSQL中四种Join操作的实现方式和性能考虑:Hash Join(适用于小表join小表)、Broadcast Join(适合大表join极小表)、Shuffle Hash Join(大表join小表)和Sort Merge Join(大表join大表)。讨论了各种Join的性能损耗点、优化策略和适用场景,并提供了相关参数设置的建议。

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

Join

表信息和sql

表A : table_A,字段a1,a2,No
表B : table_B,字段b1,b2,No
select a1,a2,b1,b2 from table_A t_A join table_B t_B on t_A.No=t_B.No ;

总体流程

流程的设计

step1 : 遍历table_A 表的所有记录,以过滤条件中的字段No的值进行分组,每个No值对于的A组数据,遍历出来,待用
step2 : 遍历table_B 表的所有记录,同A的处理方式

拿出A组数据去匹配B组数据,以A组的No值去比较,匹配出满足A中No=x时候,B中No也等于x的值的哪些数据行,(过滤 filter)

然后根据select a1,a2,b1,b2 过滤出匹配到的记录行中的几个字段(裁剪 project)

考虑性能损耗点

算法上是 遍历A ,遍历B,取相同key值后,join
实现上是 A和B的数据特点:无序,分布存储在多台数据节点上

1、抽取数据损耗时间:根据No这个value值作为分区的,shuffle read/write ,同时shuffle A,B表,慢
2、无序数据如果能先排序好(A表B表各自根据No排序),则遍历过程中,不会重复从第一行全量变量抽取,而是按顺序抽取,减少重复,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值