【大数据学习 | 面经】Spark的四种join方式

在Spark中,join操作用于合并两个数据集(如dataFrame和Dataset),其原理依赖于分布式计算的特性。Spark的join主要通过不同的连接策略来实现,选择哪种策略取决于多种因素,包括参数连接的数据集大小,是否进行了广播,是否有共同的分区分区键等。

1. Shuffle Hash Join

这是最常用的连接方式之一。当两个数据集都非常大且无法被广播时,Spark会使用shuffle hash join。这种连接方式的工作流程如下:

  • 数据按照连接键进行哈希分区。
  • 分区后的数据会在集群中重新分布。(shuffle)
  • 在每个工作节点上,对本地分区的数据执行连接操作。

这种方式的优点是通用性强,可以处理任意大小的数据集;缺点是需要进行全量的shuffle操作,这可能会带来较大的性能开销。

2. Broadcast Hash Join

当其中一个数据集相对较小(通常小于spark.sql.autoBroadcastJoinThreshold设置的阈值,默认为10M),spark可以将这个小的数据集广播到所有的工作节点上,然后在每个节点上与另一个大数据集进行连接。这种方式避免了shuffle操作,因此通常比shuffle hash join更快,但前提是广播的数据集必须足够小,以适应所有节点的内存。

3. Sort Merge Join

如果两个数据集都已经按照连接键排序,并且这些数据集很大,不适合广播,那么spark将采用sort Merge join。在这种情况下,spark首先会对两个数据集按照连接键排序,然后进行合并操作。此过程同样涉及到shuffle操作,因为数据可能需要重新分区以确保相同的键值的数据位于同一分区。sort Merge Join对于有序的数据集来说非常高效,但它也要求额外的排序步骤,这可能会增加一定的计算成本。

4. 笛卡尔积

当没有指定连接条件的时候,spark会执行笛卡尔积,即返回两个数据集所有行的组合。这种连接方式很少用,因为它会导致输出结果的数量急剧膨胀,通常是第一个数据集的行数乘上第二个数据集的行数。

5. 自适应查询执行和Join调优

从spark3.x开始引入的AQE功能可以在运行时动态优化join操作,例如,AQE可以根据实际的数据量决定是否应该使用广播连接,或者自动调整shuffle partitions的数量以优化性能。

相关推荐
觉醒大王1 分钟前
科研新手如何读文献?从“乱读”到“会读”
论文阅读·笔记·深度学习·学习·自然语言处理·学习方法
代码游侠6 分钟前
学习笔记——Linux内核与嵌入式开发3
开发语言·arm开发·c++·学习
梵得儿SHI16 分钟前
深度拆解 Google Personal Intelligence:下一代个性化 AI 的技术架构、隐私保障与未来愿景
大数据·人工智能·agi·pi·跨产品数据整合
觉醒大王23 分钟前
硕士/博士研究生避坑指南
笔记·深度学习·学习·自然语言处理·职场和发展·学习方法
代码游侠23 分钟前
C语言核心概念复习(二)
c语言·开发语言·数据结构·笔记·学习·算法
Gain_chance25 分钟前
31-学习笔记尚硅谷数仓搭建-DWD层工具域优惠券使用(支付)、互动域收藏商品、流量域页面浏览、用户域用户注册、用户域用户登录事务事实表建表语句及分析
笔记·学习
策知道31 分钟前
2026年北京政府工作报告产业指标深度解析
大数据·数据库·人工智能·搜索引擎·政务
跨境卫士苏苏42 分钟前
跨境电商:从“跑量”到“跑赢利润”的一套打法
大数据·人工智能·跨境电商·亚马逊·内容营销
袋鼠云数栈1 小时前
让多模态数据真正可用,AI 才能走出 Demo
大数据·人工智能·数据治理·多模态
Gary Studio1 小时前
rk芯片上手
学习