spark sql都有哪些join,适用哪些场景?

提问者:帅平 问题分类:面试刷题
spark sql都有哪些join,适用哪些场景?
3 个回答
岛是海碎了的心
岛是海碎了的心
Sort Merge Join(适合两张大表进行Join)
执行流程如下:
1、shuffle阶段:将两张大表根据join key进行重新分区, 两张表数据会分布到整个集群,以便分布式并行处理。
2、sort阶段:对单个分区节点的两表数据,分别进行排序。
3、merge阶段:对排好序的两张分区表数据执行join操作。join操作很简单,分别遍历两个有序序列,碰到相同join key就merge输出,否则取更小一边。
发布于:3周前 (01-22) IP属地:四川省
少女榨汁机
少女榨汁机
Shuffle Hash Join(适合一张小表[比广播场景中大一点]和一张大表进行Join)
执行流程如下:
1、对两张表分别按照join key进行重分区即shuffle,让相同join key的记录分到对应的分区中。
2、对对应分区中的数据进行join,此处先将小表分区构建为一个hash表,然后根据大表中记录的join key的hash值拿来进行匹配,即每个节点上单独执行hash算法。
发布于:3周前 (01-22) IP属地:四川省
与风为伴
与风为伴
Broadcast Hash Join(适合一张很小的表和一张大表进行Join)
执行流程如下:
1、broadcast阶段:将小表广播到所有的executor上,广播的算法有很多,最简单的是先发给driver,driver再统一分发给所有的executor。
2、hash join阶段:在每个executor上执行 hash join,小表构建为hash table,大表的分区数据匹配hash table中的数据
限制条件有:
1、被广播的表需要小于spark.sql.autoBroadcastJoinThreshold所配置的信息,默认是10M。
2、基表不能被广播,比如left outer join时,只能广播右表。
发布于:3周前 (01-22) IP属地:四川省
我来回答