Module 03 · Apache Spark
Dataframes and SparkSQLSparkSQL 和 DataFrames
欢迎观看《SparkSQL 和 DataFrames》视频!在观看完该视频后,您将能够:
- 定义 SparkSQL,了解 Spark SQL 查询的各个部分,并解释使用 SparkSQL 的好处。
- 描述什么是 DataFrame,了解 DataFrame 查询的各个部分,并解释使用 DataFrame 的好处。
- 解释 DataFrame 如何与 Spark SQL 协同工作。
什么是 SparkSQL?
SparkSQL 是 Spark 的一个模块,用于结构化数据处理。您可以使用 SQL 查询和 DataFrame API 与 Spark SQL 进行交互。Spark SQL 支持 Java、Scala、Python 和 R 等多种 API。
Spark SQL 查询执行引擎
Spark SQL 使用相同的执行引擎来计算结果,无论您使用的是哪种 API 或编程语言。开发人员可以选择最自然的 API 来表达所需的转换。
Spark SQL 查询示例
下面是一个使用 Python 编写的 Spark SQL 查询示例:
spark.sql("SELECT * FROM people")
SELECT * FROM people是一个通过 Spark SQL 执行的 SQL 查询。- 在执行此命令之前,
people实体已被注册为表视图。
SparkSQL 的优化
与基础的 Spark RDD API 不同,Spark SQL 包括以下优化功能:
- 基于成本的优化器(Cost-Based Optimizer)
- 列式存储(Columnar Storage)
- 代码生成(Code Generation)
这些优化提供了有关数据结构和计算过程的额外信息,从而提高了 Spark 的性能。
什么是 DataFrame?
DataFrame 是按列命名组织的数据集合。它的概念类似于关系数据库中的表格,也类似于 R/Python 中的数据框(data frame),但具有更丰富的优化功能。
DataFrame 的构建
DataFrame 构建在 Spark SQL 的 RDD API 之上。DataFrame 使用 RDD 来执行关系查询。
DataFrame 创建示例
下面是一个简单的 Python 代码片段,用于从 JSON 文件读取数据并创建一个简单的 DataFrame:
df = spark.read.json("data.json")
df.createOrReplaceTempView("people")
spark.sql("SELECT * FROM people")
- JSON 数据:读取并创建 DataFrame。
- SQL 查询:使用 Spark SQL 查询 DataFrame。
DataFrame 的优势
- 高度可扩展:从单个笔记本电脑上的几 KB 到大型集群上的 PB 级数据都可以处理。
- 支持多种数据格式和存储系统:如 Parquet、JSON、CSV 等。
- 优化与代码生成:通过 Catalyst 优化器提供优化和代码生成。
- 开发者友好:提供 Python、Java、Scala 和 R 的 API,便于与大数据工具集成。
SQL 查询与 DataFrame API 查询对比
以下是使用 Spark SQL 查询和 DataFrame API 查询相同结果的代码示例:
查询 DataFrame 中的“names”列
- SQL 查询方式:
SELECT names FROM people
- DataFrame API 查询方式(Python):
df.select("names").show()
这两种方式都可以获取 DataFrame 中的 names 列数据。
查询年龄大于 21 的人员
- SQL 查询方式:
SELECT * FROM people WHERE age > 21
- DataFrame API 查询方式:
df.filter(df.age > 21).show()
总结
在本视频中,您学到了:
- SparkSQL 是 Spark 的结构化数据处理模块,提供了一种称为 DataFrame 的编程抽象,同时也可以作为分布式 SQL 查询引擎。
- DataFrames 与关系数据库中的表格或 R/Python 中的数据框概念相似,但具有更丰富的优化功能。
- DataFrames 可以通过 Spark SQL 执行查询,且在大规模数据处理中提供更高效的计算和优化。