Spark中的JOIN机制





1、Hash Join概述


Apache Spark共提供了五种JOIN机制,其中常用的有三种:Shuffle Hash Join、Broadcast Hash Join及Sort Merge Join,它们都基于Hash Join,只不过需要在Hash Join前后进行Shuffle、Broadcast或Sort

实际上,Hash Join算法来自于传统数据库,而Shuffle、Broadcast和Sort是大数据(数据仓库)在分布式场景下两者结合的产物。因此,我们也说大数据(数据仓库)是由传统数据库发展而来的

通常情况下,Hash Join使用两个表中较小的表在内存中建立以Join Key为Key的哈希/散列表(Hash Table),然后扫描较大的表,同样对大表Join Key进行Hash后探测哈希/散列表,找出与哈希/散列表匹配的行

Hash Join主要分为两个阶段:建立阶段(Build Phase)和探测阶段(Probe Phase)

  • Bulid Phase:较小的表被构建成以Join Key为Key的Hash Table,较小的表也称Build Table
  • Probe Phase:扫描较大表的行并计算Join Key的哈希值,与Build Table哈希表比对,若相同则进行JOIN

值得注意的是,Hash Join适用于较小的表完全可以放于内存的情况,如果表较大,无法构造在内存中,则优化器会将它分成若干个Partition,将不能放入内存的部分写入磁盘,此时会多一个写的代价,I/O性能差

Apache Spark将参与JOIN的两张表抽象为流式遍历表(StreamIter)和查找表(BuildIter),通常StreamIter为大表,BuildIter为小表,这是由Spark根据JOIN策略自动决定的。对于每条来自StreamIter的记录,都要去BuildIter中查找匹配的记录

2、影响JOIN的因素


1)数据集的大小

参与JOIN的数据集大小会直接影响JOIN操作的执行效率。同样,也会影响Spark JOIN机制的选择

2)JOIN的连接条件

JOIN的条件涉及字段之间的逻辑比较关系。根据JOIN的条件,JOIN可分为两大类:等值连接和非等值连接

  • 等值连接:涉及字段之间一个或多个必须同时满足的相等条件(运算连接符为=
  • 非等值连接:涉及字段之间一个或多个必须同时满足的非相等条件(运算连接符不为=
  • <

相关推荐

  1. SparkJOIN机制

    2024-07-17 04:52:02       21 阅读
  2. spark sql join调优

    2024-07-17 04:52:02       42 阅读
  3. MySQLJOIN、LEFT JOIN、RIGHT JOIN讲解

    2024-07-17 04:52:02       21 阅读
  4. Apache Spark广播变量分发机制

    2024-07-17 04:52:02       42 阅读
  5. spark group by ,join数据倾斜调优

    2024-07-17 04:52:02       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 04:52:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 04:52:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 04:52:02       57 阅读
  4. Python语言-面向对象

    2024-07-17 04:52:02       68 阅读

热门阅读

  1. git config

    2024-07-17 04:52:02       26 阅读
  2. K8S组件calico重建过程

    2024-07-17 04:52:02       18 阅读
  3. 基于单片机的远程烟雾报警系统的硬件电路设计

    2024-07-17 04:52:02       23 阅读
  4. JDK、JRE、JVM

    2024-07-17 04:52:02       22 阅读
  5. hung 之 hung task 检测

    2024-07-17 04:52:02       19 阅读
  6. jdk21 future 异步线程 等待

    2024-07-17 04:52:02       21 阅读
  7. ubuntu使用vcan做本地测试

    2024-07-17 04:52:02       24 阅读