Spark SQL - 简介

目录

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进行操作

 

  • 36
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值