参考博客:https://www.cnblogs.com/duodushuduokanbao/p/9911256.html

Spark的join实现方案有三种:

  • broadcast hash join
  • shuffle hash join
  • sort-merge join

hash join

确定 小表(Bulid Table) 和 大表(Probe Table),利用小表 根据 key 进行hash,建立hash table,大表同样对key进行相同的hash,映射hash table中的记录,如果映射成功且join条件符合,则将数据进行关联。

为什么 bulid table 选择小表, probe table 选择大表? 因为在构建 hash table 时最好能将其全部加载到内存,这样才效率最高,这也说明了为什么 hash join 算法只适合至少有一个小表的场景,对于两个大表的join 场景并不适用,两个大表的 join ,可选用 sort merge join。

hash join主要针对单机,以下两种是对hash join的分布式改造后

Broadcast join

一般用于维表和实时表进行join,可将维表(一般不超过10M)发送至各个节点,使各个节点都存有一份完整的维表数据,接下来相当于单机进行hash join。

SparkSQL 也可以根据内存资源、带宽资源适量将参数 spark.sql.autoBroadcastJoinThreshold(默认是 10M) 调大,让更多 join 实际执行为 broadcast hash join。

shuffle join

当join的两张表数据量都很大时,利用 key相同的数据将会被分到相同分区上 的原理,将两张表按key进行分区,使相同key的记录分到同一个节点上,然后在对每个节点上的数据进行hash join

sort-merge join(没太理解)

和shuffle join一样,将两张大表join key进行重分区,对每个分区的节点进行排序,然后对排好序的表进行join,join的操作:分表遍历两个有序序列,碰到相同的key就merge然后输出

Spark 的三种join方式相关推荐

  1. Spark源码阅读(五) --- Spark的支持的join方式以及join策略

    版本变动 2021-08-30 增加了对Broadcast Hash Join小表大小的评估内容 增加了对Sort Merge Join优于Shuffle Hash Join调用的解释 目录 Spar ...

  2. MapReduce三种join实例分析

    本文引自吴超博客 实现原理 1.在Reudce端进行连接. 在Reudce端进行连接是MapReduce框架进行表之间join操作最为常见的模式,其具体的实现原理如下: Map端的主要工作:为来自不同 ...

  3. Spark SQL join的三种实现方式

    引言 join是SQL中的常用操作,良好的表结构能够将数据分散到不同的表中,使其符合某种规范(mysql三大范式),可以最大程度的减少数据冗余,更新容错等,而建立表和表之间关系的最佳方式就是join操 ...

  4. oracle Hash Join及三种连接方式

    在Oracle中,确定连接操作类型是执行计划生成的重要方面.各种连接操作类型代表着不同的连接操作算法,不同的连接操作类型也适应于不同的数据量和数据分布情况. 无论是Nest Loop Join(嵌套循 ...

  5. Spark支持三种分布式部署方式

    目前Apache Spark支持三种分布式部署方式,分别是standalone.spark on mesos和 spark on YARN,其中,第一种类似于MapReduce 1.0所采用的模式,内 ...

  6. Spark的三种分布式部署方式

    目前Apache Spark支持三种分布式部署方式,分别是standalone.spark on mesos和 spark on YARN,其中,第一种类似于MapReduce 1.0所采用的模式,内 ...

  7. Spark三种部署方式

    目前Apache Spark支持三种分布式部署方式,分别是standalone.spark on mesos和 spark on YARN,其中,第一种类似于MapReduce 1.0所采用的模式,内 ...

  8. spark sql 本地调试_Spark精华问答|Spark的三种运行模式有何区别?

    戳蓝字"CSDN云计算"关注我们哦! Spark是一个针对超大数据集合的低延迟的集群分布式计算系统,比MapReducer快40倍左右,是hadoop的升级版本,Hadoop作为第 ...

  9. Spark精华问答 | Spark的三种运行模式有何区别?

    戳蓝字"CSDN云计算"关注我们哦! Spark是一个针对超大数据集合的低延迟的集群分布式计算系统,比MapReducer快40倍左右,是hadoop的升级版本,Hadoop作为第 ...

最新文章

  1. 易扩展的SLAM框架-OpenVSLAM
  2. java 故障排查_java线上服务问题排查
  3. 虚拟服务器目录,服务器虚拟主机目录
  4. wikioi 1017--乘积最大
  5. LeetCode 665 非递减数列
  6. 《并行计算的编程模型》一3.5 远程内存访问:put和get
  7. linux终端 打开光驱,ubuntu如何挂载光盘? Ubuntu下中手动挂载光盘的教程
  8. Visio2013 Professional专业版密钥
  9. 数据中心机房建设项目技术方案
  10. html转pdf手机,html转pdf
  11. SMing:2022年中青杯B题思路
  12. CycloneII之EDA及学术开发功能描述
  13. 人大金仓再获太极股份近2亿元增资,剑指中国数据库领域头把交椅
  14. qchart 怎么点击一下 出一条线_动漫日系雨伞怎么画?教你用集中线尺画一把日本雨伞!...
  15. 【Wechat】微信小程序注册以及认证流程
  16. 删除google网页快照方法
  17. linux php zlib,Linux查询zlib版本
  18. XiaoHu日志 6/10~6/12
  19. 如何处理训练样本不均衡的问题
  20. bert4torch快速上手

热门文章

  1. 群控系统linux脚本,群控系统脚本要自己录制
  2. h5页面键盘弹出影响页面布局(兼容)
  3. BASE64加密解密及乱码问题
  4. jupyter notebook / jupyter lab 深色主题下如何设置字体 及 如何设置绘图颜色
  5. 小白,想入门程序员,应该从什么开始学,顺序是什么?
  6. 2016阿里巴巴诸神之战创客大赛纪实
  7. 数据结构与算法(Java版) | 就让我们来看看几个实际编程中遇到的问题吧!
  8. javaweb项目发送邮件自定义发件人名称(javamail)
  9. php 找祖先,鲸鱼的祖先有4条腿
  10. HTML五子棋游戏论文,五子棋毕业论文-HTML开发五子棋的原型设计.doc