Azure Databricks 上的 PySpark
Azure Databricks 基于 Apache Spark 构建,它是用于大数据和机器学习的统一分析引擎。 PySpark 可帮助你使用 Python 编程语言与 Apache Spark 进行交互,这是一种易于学习、实现和维护的灵活语言。 它还为 Databricks 中的数据可视化提供了许多选项。 PySpark 结合了 Python 和 Apache Spark 的强大功能。
本文概述了 Databricks 上的 PySpark 的基础知识。
Spark 概念简介
在深入了解如何使用 PySpark 之前,请务必先理解 Apache Spark 的关键概念。
数据帧
DataFrame 是 Apache Spark 中的主要对象。 DataFrame 是一个按命名列组织的数据集。 可以将 DataFrame 视为电子表格或 SQL 表,它是由一系列记录(类似于表中的行)和不同类型的列组成的二维标记数据结构。 DataFrame 提供了一组丰富的功能(例如,选择列、筛选、联接和聚合),让你能够有效地执行常见数据处理和分析任务。
一些重要的 DataFrame 元素包括:
- 架构:架构定义 DataFrame 的列名和类型。 数据格式在架构定义和强制措施方面具有不同的语义。 某些数据源提供架构信息,而另一些数据源则依赖于手动架构定义或允许架构推理。 用户可以手动定义架构,也可以从数据源读取架构。
- 行:Spark 将 DataFrame 中的记录表示为
Row
对象。 虽然 Delta Lake 等基础数据格式使用列来存储数据,但为了优化,Spark 使用行来缓存和随机排布数据。 - 列:Spark 中的列类似于电子表格中的列,可以表示字符串或整数等简单类型,也可以表示数组、映射或 null 等复杂类型。 可以编写从数据源中选择、操作或移除列的查询。 可能的数据源包括表、视图、文件或其他 DataFrame。 列永远不会从数据集或 DataFrame 中移除,只是通过
.drop
转换或在select
语句中省略,将它们从结果中省略掉。
数据处理
Apache Spark 使用延迟评估来处理使用 DataFrame 定义的转换和操作。 这些概念是了解使用 Spark 进行数据处理的基础。
转换:在 Spark 中,可以将处理逻辑表示为转换,即使用 DataFrame 加载和操作数据的指令。 常见转换包括读取数据、联接、聚合和类型强制转换。 有关 Azure Databricks 中的转换的信息,请参阅转换数据。
延迟评估:Spark 通过识别用于评估由转换指定的逻辑的最有效的物理计划,来优化数据处理。 但是,在调用操作之前,Spark 不会对转换执行操作。 Spark 不会按指定的确切顺序评估每个转换,而是会等到某个操作触发对所有转换的计算。 这称为延迟评估或延迟加载,它允许你链接多个操作,因为 Spark 以延迟方式处理其执行,而不是在定义它们后立即执行。
注意
延迟评估意味着 DataFrame 将逻辑查询作为一组针对数据源的指令存储,而不是作为内存中的结果存储。 这与 Pandas DataFrame 使用的“及早执行”模型有很大不同。
操作:操作指示 Spark 计算一个或多个 DataFrame 进行的一系列转换的结果。 “操作”操作会返回一个值,可以是以下任一值:
- 在控制台或编辑器中输出数据的操作,例如
display
或show
- 收集数据(返回
Row
对象)的操作,例如take(n)
和first
或head
- 向数据源写入数据的操作,例如
saveAsTable
- 触发计算的聚合,例如
count
重要
在生产数据管道中,写入数据通常是应存在的唯一操作。 所有其他操作都会中断查询优化,并可能导致瓶颈。
DataFrame 不可变意味着什么?
DataFrame 是针对一个或多个数据源定义的转换和操作的集合,但最终 Apache Spark 会将查询解析回原始数据源,因此数据本身不会更改,DataFrame 也不会更改。 换句话说,DataFrame 是不可变的。 因此,在执行转换后,将返回一个新的 DataFrame,必须将其保存到变量中,以便在后续操作中进行访问。 如果要评估转换的中间步骤,请调用“操作”。
API 和库
与 Spark 的所有 API 一样,PySpark 配备了许多可以实现和支持强大功能的 API 和库,包括:
- 通过 Spark SQL 和 DataFrame 使用关系查询处理结构化数据。 Spark SQL 允许将 SQL 查询与 Spark 程序混合使用。 借助 Spark DataFrame,可以使用 Python 和 SQL 高效读取、写入、转换和分析数据,这意味着始终可以利用 Spark 的全部功能。 请参阅 PySpark 入门。
- 使用结构化流式处理对流进行可缩放处理。 可以像对静态数据表达批量计算一样表达流式处理计算,并且 Spark SQL 引擎会随着流数据的不断到达以增量方式连续运行它。 请参阅结构化流概述。
- 使用 Spark 上的 Pandas API 处理 Apache Spark 的 Pandas 数据结构和数据分析工具。 通过 Spark 上的 Pandas API,可以借助适用于 pandas 的单个代码库(测试、较小的数据集)和适用于 Spark 的单个代码库(生产、分布式数据集),通过跨多个节点运行 pandas 工作负载将其缩放为任意大小。 请参阅 Spark 上的 Pandas API 概述。
- 使用机器学习 (MLLib) 的机器学习算法。 MLlib 是一个基于 Spark 构建的可缩放机器学习库,它提供一组统一的 API,可帮助用户创建和优化实际的机器学习管道。 请参阅机器学习库概述。
- 使用 GraphX 进行图形和图形并行计算。 GraphX 引入了每个顶点和边都附加了属性的新有向多重图,并公开了图形计算操作符、算法和生成器,以简化图形分析任务。 请参阅 GraphX 概述。
Spark 教程
有关 Databricks 上的 PySpark 的用法示例,请参阅以下文章:
Apache Spark 文档 还提供了学习 Spark 的快速入门和指南,包括以下内容:
PySpark 参考
Azure Databricks 会维护自己的 PySpark API 版本和相应的参考,可在以下部分找到: