[Spark]-Join方式的实现

Posted nightpxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Spark]-Join方式的实现相关的知识,希望对你有一定的参考价值。

对于Spark来说,有3种Join的实现方式

  Broadcast Hash Join

  Shuffle Hash Join

  Sort Merge Join

  Broadcast Hash Join和Shuffle Hash Join都是hash-join 区别只在于先广播还是先shuffle. Sort Merge Join

 

  Hash Join

    hash-join 有两个概念 基准表(Build Table)与探测表(Probe Table). 整个hash-join的流程如下

      决定两表关联中,谁作为基准表,谁作为探测表(通常情况下小表作为基准表,大表作为探测表)

      然后依次读取基准表,将基准表的连接键取hash(键hash值,键值)放入内存中(内存不够会溢出到磁盘),作为hash-table

      然后依次读取探测表,取基准表的连接键取hash,查看hash-table中键hash值是否存在,如果存在则比较键值是否相等,如果仍然相等,则两条记录匹配上了

    这里可以看出

      hash-join正常情况下效率是非常高的,因为这已非常接近最优解 O(n)+O(m)了

      hash-join适合至少有一个小表的情况下,否则构建的hash-table容易溢出到磁盘

  Sort Merge Join    

    Sort-Merge-Join的处理核心是先排序,先将两张表都按照连接键排序

    未完

 

  参考 https://www.cnblogs.com/0xcafedaddy/p/7614299.html

以上是关于[Spark]-Join方式的实现的主要内容,如果未能解决你的问题,请参考以下文章

Spark SQL 之 Join 实现

全面解读 Spark SQL 之 Join 原理与实现

OpenMLDB: 拓展Spark源码实现高性能Join

原创经验分享(19)Spark中Join实现原理

SparkSQL的3种Join实现

SparkSQL的3种Join实现