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排序),则遍历过程中,不会重复从第一行全量变量抽取,而是按顺序抽取,减少重复,

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

被折叠的 条评论
为什么被折叠?



