当前SparkSQL支持三种Join算法:shuffle hash join
、broadcast hash join
以及sort merge join
。
Hash Join
采用hash join算法,整个过程会经历三步:
-
确定Build Table以及Probe Table:Build Table使用join key构建Hash Table,而Probe Table使用join key进行探测,探测成功就可以join在一起。通常情况下,小表会作为Build Table,大表作为Probe Table。
-
构建Hash Table:依次读取Build Table的数据,对于每一行数据根据join key进行hash,hash到对应的Bucket,生成hash table中的一条记录。数据缓存在内存中,如果内存放不下需要dump到外存。
-
探测:再依次扫描Probe Table的数据,使用相同的hash函数映射Hash Table中的记录,映射成功之后再检查join条件,如果匹配成功就可以将两者join在一起。
Broadcast Hash Join
将其中一张小表广播分发到另一张大表所在的分区节点上,分别并发地与其上的分区记录进行hash join。broadcast适用于小表很小,可以