Spark SQL 前世今生
Spark SQL是Spark上运行SQL的模块
Hive on Spark是在Hive的基础上添加了Spark的执行引擎
两者是不同的
metastore,元数据,比如表的名字、表存在的位置、有哪些字段、顺序类型等等。存储在MySQL里面。好处是在Hive创建了表,Spark SQL可以访问,反之亦然,因为创建都是独立的。
Spark SQL 概述
Spark SQL是Spark中用来处理结构化数据的一个模块。
- 集成的
能够使用SQL或者Dataframe API 查询结构化数据。
- 统一的数据访问
能够使用相同的方式连接任何的数据源。
Dataframe 和 SQL 提供了能够连接数据源的共同方式。包含(Hive,Avro,Parquet,ORC,JSON和JDBC等)
- 能够很好地与Hive进行集成
在已经存在的数据仓库中执行 SQL 和 HQL的查询。
- 标准的 Connectivity
通过 JDBC 或者 ODBC来连接 BI 工具
Hive、Spark SQL 都不仅仅是SQL
Spark SQL 架构
其中前端是sql语言或者spark program代码或者Streaming SQL,通过Catalyst进行优化和转换,传给后端Spark引擎进行运算。
SQL =》 抽象语法树 =》 逻辑执行计划 =》 优化后的逻辑执行计划 =》 物理执行计划 =》 优化后的物理执行计划 =》 Spark引擎
Dataframe / Dataset 详解
pandas 和 R 中的 Dataframe 是单机版,而 Spark SQL 中的 Dataframe 是分布式的,区别就在这里。
Dataset 是一个分布式的数据的集合,在Spark1.6中添加。Python不支持Dataset API。仅仅支持 Scala 和 Java。
Dataframe 是以列的形式构成分布式数据集,和关系型数据库的表类似
Spark SQL 编程
Spark SQL 的入口是 SparkSession
从已有的数据源创建 Dataframe
查看 Dataframe 的信息
df select 可以选择多个列,然后用show进行展示
还可以像pandas中一样用 df[‘name’]的方式访问列
filter 和 groupby 函数
注册临时表,并使用SQL语句进行查询
创建全局视图,用的不是很多
需要加上global_temp标识
Dataframe 与RDD进行转换
- 使用反射机制,推导出数据类型
- 编程指定Schema
1中方式,以后编程按照模板写就行了
2中方式
比较来说是第二种比较灵活,但是代码量稍多,推荐第二种