目录
1. 概念介绍
2. Spark SQL与Hive的区别
3. 数据结构分类
4. 特点
4.1 易整合
4.2 统一的数据访问方式
4.3 兼容hive
4.4 提供标准的数据连接
5 Spark的数据模型介绍
1. 概念介绍
sparkSQl是spark专门针对结构化数据(DataFrame和DataSets)处理的一个组件,可以快速简单的处理结构化数据,他可以加载结构化数据,将其映射成表,利用SQL进行数据处理
sparkSQL 其实是对spark-core处理结构化数据的底层原理进行了封装
底层的物理执行计划还是spark-core的执行过程2. Spark SQL与Hive的区别
hive是单独的一个组件,他的执行过程是:
提交SQL --> 语法解析校验 --> 生成逻辑执行计划 --> 绑定元数据 --> 优化逻辑代码 --> 生成物理执行计划(MR)
-  Shark -  运行的模式是hive on spark 
-  会将hivesql转换为spark的rdd 
-  shark是基于hive开的,维护麻烦,2015年停止维护 
 
-  
-  sparkSQL -  是spark团建独立开发的工具,2014年发布1.0版本 
-  sparkSQL工具对spark的兼容性更好,优化性能得到提升 
-  sparkSQL本质也是将sql语句转化为rdd执行,catalyst引擎负责将sql转化为rdd 
-  sparkSQL可以连接使用hive的metastore服务,管理表的元数据 
 
-  
3. 数据结构分类
-  结构数据(DataFrame) -  就是表结构数据,有行列组成,并且描述了数据的属性(字段)和类型,表信息 
-  String int 
 
-  
-  半结构化数据 spark中可以通过方法将半结构化数据转化为结构化数据(DataFrame) -  xml和json 
-  描述数据的存储结构,但是无法描述数据的类型 
 
-  
<name>zhansan</name>
<age>18</age>
{
name:zhangsan
}-  非结构化数据 rdd可以处理 -  文本,图片,视频 
 
-  
4. 特点
4.1 易整合
sparkSQL 可以在spark的编程中,将SQL和算子进混合使用,使编程更加的灵活
val res = spark.sql("select * from tb_user")
res.map()4.2 统一的数据访问方式
sparkSQL为各种不同类型的数据源提供统一的访问方式,可以跨各类数据源进行join,支持的数据源如:csv,tcv(tab键作为分隔符),hive,Avro,Parquet,orc(列式存储文件格式,本身就是有结构的),json,jdbc
-  使用read方法可以读取hdfs数据,mysql数据,不同类型的文件数据(json,csv,orc) 
-  使用write方法可以写入hdfs,mysql不同类型的文件 
4.3 兼容hive
sparkSQL支持hiveSQL语法以及hive的SerDes,UDFs,并且允许访问已经存在的hive数仓数据
4.4 提供标准的数据连接
sparkSQL的server模式,可以为各类bi工具提供标准的JDBC、ODBC连接

SparkSQL可以看做一个转换层,向下对接各种不同的结构化数据源,向上提供不同的数据访问方式
5 Spark的数据模型介绍
spark封装一个基础数据模型(数据类型)rdd
然后根据rdd进行再次封装,得到新的数据类型 dataframe
然后根据dataframe再次封装得到了dataset类型
 
 
-  rdd 弹性分布式集合 使用python,java,scala,c,R. 
[1,zhangsan,20,2,lisi,22]-  Dataframe 类型 结构化数据 行列,表信息(数据的属性(字段)和类型) 使用python,java,scala,c,R -  row类 行数据 rdd中一个列表元素 
-  schema类 表信息 
 
-  
[
row1=[1,zhangsan,20],
row2=[1,lisi,22]
]
schema
{
id:int,
name:string,
age:int
}-  datasets类型 结构化数据 java,scala -  row类 一行数据 一个dataframe 
-  schema类 表信息 
-  从dataset中取出一行数据可以当作dataframe类型操作 
 
-  
[
row1=[1,zhangsan,20],
row2=[1,lisi,22]
]
schema
{
id:int,
name:string,
age:int
}
row1 可以当做dataframe进行操作



















