Coursera 笔记

Module 03 · Apache Spark

Dataframes and SparkSQLSparkSQL 和 DataFrames

Coursera ↗

欢迎观看《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”列

  1. SQL 查询方式:
SELECT names FROM people
  1. DataFrame API 查询方式(Python):
df.select("names").show()

这两种方式都可以获取 DataFrame 中的 names 列数据。

查询年龄大于 21 的人员

  1. SQL 查询方式:
SELECT * FROM people WHERE age > 21
  1. DataFrame API 查询方式:
df.filter(df.age > 21).show()

总结

在本视频中,您学到了:

  • SparkSQL 是 Spark 的结构化数据处理模块,提供了一种称为 DataFrame 的编程抽象,同时也可以作为分布式 SQL 查询引擎。
  • DataFrames 与关系数据库中的表格或 R/Python 中的数据框概念相似,但具有更丰富的优化功能。
  • DataFrames 可以通过 Spark SQL 执行查询,且在大规模数据处理中提供更高效的计算和优化。