🗒️SparkSQL内核剖析 第一、二章
2023-6-29
| 2023-6-30
字数 839阅读时长 3 分钟
type
status
date
slug
summary
tags
category
icon
password

第一章 Spark SQL 背景

Spark的发展历程
notion image
Spark的技术栈
notion image
 

第二章 Spark 基础知识介绍

RDD(着重理解)

  • 提出背景
在多个并行操作之间会有重用工作数据集的情况。例如,许多机器学习算法需要将当前迭代权值调优后的结果数据集作为下次迭代的输入。
  • 问题介绍
在 Map Reduce 计算框架里,经过 Reduce 操作后输出的数据会写回磁盘,然后从磁盘读取作为下次迭代的输入。对于反复使用的数据集会频繁写入读出磁盘,性能损耗严重。
  • 解决方案
在编程接口层面提供一种共享内存模型,全称是弹性分布式数据(Resilient Distributed Dataset),代表内存里保存的一个只读的数据分区集合。这样,并行操作重新使用数据的时候就可以使用内存中缓存好的数据集了。
  • 限制条件
1)一个 RDD 通常只能通过其他的 RDD 转换而创建
2)RDD 定义了各种丰富的转换操作,如 map join filter 等
3)新的 RDD 包含了如何从其他 RDD 衍生所必需的信息
因此,RDD 之间存在着依赖关系。分成两种:
一种是窄依赖,RDD 之间分区是一一对应的;
另一种是宽依赖,下游 RDD 的每个分区与上游 RDD(也称之为父 RDD)的每个分区都有关,是多对多的关系。
  • 应用方式
原始的 RDD 可以生成一个或者多个新的 RDD,而多个 RDD 也能汇总生成一个 RDD,把这些 RDD 当成点,依赖关系当成一条边,就可以得到一个有向无环图(DAG)。下图展示了一个例子:
notion image
在实际执行的时候,RDD 通过 Lineage 信息(血缘关系)来完成容错,即使出现数据分区丢失,也可以通过 Lineage 信息重建分区。

Dataframe

RDD 中的数据不包含任何结构信息,数据的内部结构可以被看作“黑盒”,因此,直接使用 RDD 时需要开发人员实现特定的函数来完成数据结构的解析。
DataFrame 中的数据集类似于关系数据库中的表,按列名存储,具有 Schema 信息,开发人员可以直接将结构化数据集导入 DataFrame。

Dataset

Dataset 是比 DataFrame 更为强大的 API。Dataset 结合了 RDD DataFrame 的优点,提供类型安全和面向对象的编程接口,并引入了编码器(Encoder)的概念。
典型的 Dataset 创建与使用案例如下,其中定义的 Person 类就起到了 Encoder 的作用。
notion image
在映射的过程中,Encoder 首先检查定义的 Person 类的类型是否与数据相符,如果不相符(例如 age 字段大于 Long 的最大值等),则能够及时提供错误信息,防止不正确地处理数据。
 
  • Spark
  • SparkSQL内核解析
  • SparkSQL|explain语法SparkSQL内核剖析 第三章(上)
    Loading...