Spark SQL、DataFrames 和 Datasets 指南

Spark SQL 是一个用于结构化数据处理的 Spark 模块。与基本的 Spark RDD API 不同,Spark SQL 提供的接口为 Spark 提供了有关数据和正在执行的计算结构的更多信息。在内部,Spark SQL 使用这些额外的信息进行额外的优化。与 Spark SQL 交互有几种方式,包括 SQL 和数据集 API。当计算结果时,使用相同的执行引擎,与所使用的 API/语言无关。这种统一意味着开发人员可以根据提供的最自然的方式在不同的 API 之间轻松切换,以表达给定的转换。

本页上的所有示例都使用了包含在 Spark 分发中的示例数据,并可以在 spark-shell pyspark shell 或 sparkR shell 中运行。

SQL

Spark SQL的一个用途是执行SQL查询。 Spark SQL还可以用于从现有的Hive安装中读取数据。有关如何配置此功能的更多信息,请参考 Hive表 部分。当从另一个编程语言中运行SQL时,结果将作为 数据集/DataFrame 返回。 您还可以使用 命令行 或通过 JDBC/ODBC 与SQL接口进行交互。

数据集和数据框

数据集是一个分布式的数据集合。 数据集是Spark 1.6中新增的接口,它结合了RDD的好处(强类型,能够使用强大的lambda函数)和Spark SQL优化执行引擎的优势。可以从JVM对象中 构建 数据集,然后使用函数式转换进行操作( map , flatMap , filter 等)。 数据集API在 Scala Java 中可用。Python不支持数据集API。但由于Python的动态特性,数据集API的许多好处已经可用(即您可以自然地按名称访问行的字段 row.columnName )。R的情况类似。

一个 DataFrame 是一个 数据集 ,组织成命名的列。它在概念上等同于关系数据库中的表或 R/Python 中的数据框,但在后台具有更丰富的优化。DataFrame 可以从各种 构建,例如:结构化数据文件、Hive 中的表、外部数据库或现有的 RDD。DataFrame API 在 Scala、Java、 Python R 中可用。在 Scala 和 Java 中,DataFrame 由 Row 的数据集表示。在 Scala API 中, DataFrame 只是 Dataset[Row] 的类型别名。而在 Java API 中,用户需要使用 Dataset 来表示 DataFrame

在本文件中,我们将经常提到称为 DataFrames 的 Scala/Java 数据集 Row