第9章 Spark SQL

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010819416/article/details/82829932

三大功能:
1)可以从各种结构化数据源(JSON、Hive、Parquet)中读取数据
2)支持在Spark程序内使用SQL语句进行数据查询,也支持通过标准数据库连接器(JDBC/ODBC)连接Spark SQL进行查询
3)支持SQL与常规代码高度整合,包括连接RDD与SQL表、公开的自定义SQL函数接口

Spark SQL提供的SchemaRDD,存放Row对象的RDD,包含记录的结构信息,可以运行SQL查询
在这里插入图片描述

9.1 连接Spark SQL
Spark SQL可以包含Hive支持,也可以不包含
引入依赖,支持Hive:spark-hive-版本,不支持Hive:spark-sql-版本
Spark SQL编程入口,支持Hive:HiveContext,不支持Hive:SQLContext
把Spark SQL连接到一个部署好的Hive上。

9.2 在运用中使用Spark SQL

基于已有的SparkContext创建出一个HiveContext,使用HiveContext创建出表示结构化数据的SchemaRDD,并且使用SQL或是类似map()的普通RDD操作来操作这些SchemaRDD。

9.2.1 初始化Spark SQL

hiveCtx = HiveContext(sc)

9.2.2 基本查询示例

要在一张数据表上进行查询,需要调用HiveContext或者SQLContext中的sql()方法。

9.2.3 SchemaRDD
读取数据或执行查询都会返回SchemaRDD。与表概念类似。
可以把任意SchemaRDD注册为临时表,这样就可以使用HiveContext.sql来对它进行查询了。

使用Row对象
Row对象表示SchemaRDD中的记录,其本质就是一个定长的字段数组。

9.2.4 缓存

使用专门的hiveCtx.cacheTable(“tableName”)进行缓存。
也可以使用HiveQL和SQL语句来缓存表,只需要运行CACHE TABLE tableName 和 UNCACHE TABLE tableName来缓存表或者删除已有的缓存即可。

9.3 读取和存储数据

9.3.1 Apache Hive

9.3.2 Parquet
流行的列式存储格式。
通过HiveContext.parquestFile来读取数据。
使用saveAsParquestFile()把SchemaRDD的内容以Parquest格式保存。

9.3.3 JSON

9.3.4 基于RDD

9.4 JDBC/ODBC服务器

9.5 用户自定义函数

9.6 Spark SQL性能

9.7 总结

猜你喜欢

转载自blog.csdn.net/u010819416/article/details/82829932