Spark SQL 是 Spark 处理结构化数据的一个模块.与基础的 Spark RDD API 不同, Spark SQL 提供了查询结构化数据及计算结果等信息的接口.在内部, Spark SQL 使用这个额外的信息去执行额外的优化.有几种方式可以跟 Spark SQL 进行交互, 包括 SQL 和 Dataset API.当使用相同执行引擎进行计算时, 无论使用哪种 API / 语言都可以快速的计算.这种统一意味着开发人员能够在基于提供最自然的方式来表达一个给定的 transformation API 之间实现轻松的来回切换不同的 .
即接入Spart SQL, 需要通过 SQL 和 Dataset API 两种方式。
SQL
Spark SQL 的功能之一是执行 SQL 查询.Spark SQL 也能够被用于从已存在的 Hive 环境中读取数据.更多关于如何配置这个特性的信息, 请参考 Hive 表 这部分. 当以另外的编程语言运行SQL 时, 查询结果将以 Dataset/DataFrame的形式返回.您也可以使用命令行或者通过 JDBC/ODBC与 SQL 接口交互.
Datasets and DataFrames
-
Datasets
-
DataFrames
- A DataFrame is a Dataset organized into named columns.它的概念与一个在关系型数据库或者在 R/Python 中的表是相等的, 但是有很多优化.
- DataFrames 可以从大量的 sources 中构造出来, 比如:结构化的文本文件, Hive中的表, 外部数据库, 或者已经存在的 RDDs.
- DataFrame API 可以在 Scala, Java, Python, 和 R中实现. 在 Scala 和 Java中, DataFrame 由 DataSet 中的
RowS
(多个 Row)来表示. 在 Scala API中,DataFrame
仅仅是一个Dataset[Row]
类型的别名. 然而, 在 Java API中, 用户需要去使用Dataset<Row>
去代表一个DataFrame
.
Why Spark SQL
Spark SQL到底有什么用?
从shark说起。开始shark项目时,hive(MapReduce)还是在hadoop使用SQL的唯一选择。hive编译SQL成为可伸缩MapReduce作业,并且可以工作在各种不同格式下,然而,它达不到预期的性能,为了运行交互式查询,组织需要部署昂贵的专有企业数据仓库(EDWs),严格的和冗长的ETL管道。
Shark推出之初,大量复用了Hive的既有内容。这一点在Spark SQL这里得到改变。Shark逐渐使用Spark SQL,直到0.9版本以后停止更新并建议用户转移到Spark SQL
网友评论