SparkSQL常见语法的实现原理

1.引言

作为一名数据开发工程师,江湖人称SQL Boy,那么我们对天天都在写的Spark SQL底层实现了解多少呢。下面我将对常见的SQL语法底层实现进行盘点。

2.1.Join

相信大家对join的实现原理最熟悉了,开始吟唱:小表小于10MB就广播避免shuffle...

一共有三种实现。

2.1.1.BroadcastHashJoin

实现

​其中一个表的大小小于 ​广播阈值​(默认 10MB,可通过 spark.sql.autoBroadcastJoinThreshold 配置),广播到所有 Executor。

  • 哈希表构建:在每个 Executor 上,将广播表构建为哈希表。
  • Join 执行:将大表的数据与哈希表进行 Join。

特点

  • 避免 Shuffle,性能高。
  • 适合小表和大表的 Join。

2.1.2.SortMergeJoin

实现

两个表的大小都较大,无法广播。

  • 数据排序:对两个表的数据按 Join Key 进行排序。
  • 数据 Shuffle:将排序后的数据进行 Shuffle,确保相同 Join Key 的数据被分配到同一个 Task。
  • Join 执行:对排序后的数据进行合并,执行 Join。

​​特点

  • 适合大表和大表的 Join。
  • 数据分布均匀时,性能较高。

2.1.3.ShuffledHashJoin

实现

两个表的大小都大于 ​广播阈值​(默认 10MB),但小于 ​SortMergeJoin的适用范围(通常为几十 GB 到几百 GB)两个表的大小适中,无法广播。

  • 数据 Shuffle:对两个表的数据按 Join Key 进行 Shuffle,确保相同 Join Key 的数据被分配到同一个 Task。
  • 哈希表构建:在每个 Task 上,将其中一个表构建为哈希表。
  • Join 执行:将另一个表的数据与哈希表进行 Join。

特点

  • 适合中等规模表的 Join。
  • 实现简单,性能适中。

2.1.x.疑问

为什么大表join大表要用SortMergeJoin这种算法,它有什么优势?答:

  • 分阶段处理:通过 排序 和 合并 的方式,SortMergeJoin 可以分阶段处理数据,避免一次性加载大量数据。由于内存占用较低,SortMergeJoin 不容易出现内存溢出(OOM)问题。
  • 处理数据倾斜:SortMergeJoin 对数据倾斜的容忍度较高,因为它是基于排序的算法,不会因为某些键的数据量过大而导致性能急剧下降。
  • 适合分布式环境:SortMergeJoin 在分布式环境中表现稳定,适合大规模集群。

2.2 Group By

局部聚合

  • 在每个分区内,Spark SQL 会先进行 局部聚合,生成中间结果。
  • 局部聚合可以减少数据传输量和全局聚合的计算开销。

​​全局聚合

  • 将局部聚合的结果进行 全局聚合,生成最终结果。
  • 全局聚合需要对数据进行 Shuffle,确保相同分组键的数据被分配到同一个 Task。

2.3.Count(Distinct xxx)

局部去重

  • 在每个分区内,Spark SQL 会先对数据进行 局部去重,生成中间结果。
  • 局部去重可以减少数据传输量和全局聚合的计算开销。

​​全局聚合

  • 将局部去重的结果进行 全局聚合,计算最终的 COUNT(DISTINCT)。
  • 全局聚合需要对数据进行 Shuffle,确保相同分组键的数据被分配到同一个 Task。

2.4.In

2.4.1.如果 IN 子句中的值是常量

​实现逻辑

  • 将 IN 子句中的值转换为一个 HashSet。
  • 在数据过滤时,通过 HashSet 查找 判断某个值是否存在于集合中。

​特点

  • 查找效率高,时间复杂度为 O(1)。
  • 适用于常量值的 IN 查询。
  • 不会产生shuffle。

​​2.4.2.如果 IN 子句中的值是动态的(如子查询)。

​实现逻辑

  • 将 IN 子句中的值转换为一个 数组。
  • 在数据过滤时,通过 线性查找 判断某个值是否存在于数组中。

​特点

  • 查找效率较低,时间复杂度为 O(n)。
  • 适用于动态值的 IN 查询。

in (子查询)是否会产生shuffle:

可能会,如果子集小则广播,如果子集大则SortMergeJoin,参照Join的实现。

2.5.窗口函数

todo

相关推荐
Fluxproxy27 分钟前
大模型批量数据采集:AI 自动化工作流搭建实战
大数据·人工智能·自动化
sun1536902757227 分钟前
超声波风速风向传感器:测量原理、通讯协议与应用场景详解
大数据
国科安芯1 小时前
商业光学遥感载荷焦平面供电链的低噪声稳压器研究综述——以国科安芯ASP7A84AS型3A低压差线性稳压器为器件级参照
大数据·网络·嵌入式硬件·平面·卫星·商业航天·抗辐射
米软科技1 小时前
数字化转型:多元化集团如何构建高效的AI数字化中台?
大数据·人工智能
Leo.yuan1 小时前
Dora企业级Data Agent应用指南:存量BI复用、私有化部署与权限管理
大数据·人工智能
千里念行客2403 小时前
南都电源在甘肃玉门的200MW/800MWh独立共享储能电站建成
大数据·科技·能源
程序员梅雨3 小时前
【从零开始学习数据仓库 | 第二篇】: 拉链表 & 数仓分层
大数据·数据仓库·学习
GlobalInfo4 小时前
机器人线缆用无卤TPU料市场分析报告深度版:产业洞察、技术演进与路径
大数据·人工智能·机器人
MARSERERER6 小时前
Flink将Hive数据导入StarRocks中任务重跑如何避免数据重复?
大数据
电子科技圈6 小时前
2026 RISC-V中国峰会观察:编译调试工具链的“在场节奏”,释放了什么信号?
大数据·人工智能·设计模式·软件工程·软件构建·代码规范·risc-v