0300 Spark SQL, DataFrames and Datasets Guide

转载请注明出处,谢谢合作~

Spark SQL, DataFrames 和 Datasets 编程指南

Spark SQL 是 Spark 中负责结构化数据处理的模块。不像基础的 Spark RDD API,Spark SQL 提供的接口为数据和计算执行期间的数据结构提供了更多的信息。在内部,Spark SQL 使用这些信息进行额外的优化。有几种方式可以和 Spark SQL 进行交互,包括 SQL 语言和 Dataset API。无论使用什么样的 API 或者语言来表达计算,在计算过程中的执行引擎是一样的。这样的统一使得开发者可以轻松的在不同的 API 之间来回切换,所需要关心的只是以何种方式表达一个计算流程更自然。

文档中所有的示例使用的相同的样例数据,而且可以通过 spark-shellpyspark shell 或者sparkR 脚本执行。

SQL

一种使用 Spark SQL 的方式就是执行 SQL 查询语句。Spark SQL 还可以被用来读取已经存储在 Hive 中的数据。关于如何配置 Hive,参见 Hive Tables 章节。如果从另一种编程语言中使用 SQL,得到的结果会以 Dataset/DataFrame 的方式呈现。还可以通过命令行(command-line)或者 JDBC/ODBC 来使用 SQL 接口。

Datasets and DataFrames

一个 Dataset 就是一个分布式数据集合。Dataset 是在 Spark 1.6 版本加入的新接口,兼具 RDD 的长处(强类型,能够使用 lambda 函数) 和 Spark SQL 优化执行引擎的优势。一个 Dataset 可以通过 JVM 中的对象构建(constructed),之后就可以通过 transformation 算子 (map, flatMap, filter, etc.) 进行操作。Dataset API 支持 ScalaJava 语言,不支持 Python 语言。但是出于 Python 的动态类型特性,许多 Dataset 的优势其实已经具备了(比如可以通过 row.columnName 按照名称访问一行中的某个字段),R 语言也是一样。

一个 DataFrame 就是一个对列进行命名之后的 Dataset。语义上等同于数据库中的一张表或者 R/Python 中的 dataframe,但是 DataFrame 在底层有更丰富的优化。DataFrame 可以通过丰富的数据源(sources)来构建,例如结构化数据文件,Hive 表,外部数据库,或者已存在的 RDD。DataFrame API 支持 Scala,Java,PythonR 语言,在 Scala 和 Java 中,一个 DataFrame 被表示为 Row 类型的 Dataset。在 Scala API 中,DataFrame 只是的一个别名。不过,在 Java API 中,用户需要用类型 Dataset<Row> 表示一个 DataFrame

在这篇文档中,会经常用 DataFrame 表示 Scala/Java 中的 Row 类型的 Datasets。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。