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
。