大数据学习 Spark SQL

前言

Spark SQL是一个用来处理结构化数据的Spark组件,前身是Shark,Spark SQL拜托了Shark对Hive的依赖。

需要格外注意的是,Spark SQL提供了基于RDD的、名字叫DateFrame的这个数据结构,是一个分布式的Row对象集合。

Spark SQL底层依赖Spark Core,而Spark Core底层依赖RDD。
在这里插入图片描述

Spark和Hive

  • Spark SQL可以兼容Hive以便Spark SQL支持Hive表访问

  • Hive基于MapReduce,后者是中间操作是基于磁盘IO的,而Spark SQL基于内存

  • Spark SQL 拥有Catalyst 优化器

  • Spark SQL能够支持不同数据源

Spark SQL能替代Hive吗?

  • Spark SQL没有自己的数据存储,需要依赖第三方
  • Spark SQL没有元数据管理,要依赖Hive
  • Hive有多种数据源同步配套组件,例如Sqoop和Flume等等

Spark SQL不可替代Hive,但是能够整合Hive实现更高的效率。

Spark SQL访问仓库

Spark SQL基于Thrift server访问Hive仓库
在这里插入图片描述

DataFrame、DataSet、RDD有什么区别

  • DF是基于RDD的分布式数据库,是Row对象的集合,相比RDD有更高效的性能,提供丰富的API。
  • DS可以看作是DF的一个特例,DS是一个强类型的数据集。
  • DF相比RDD,知道数据的结构类型,定制化内存管理,将数据保存在JVM堆外管理,摆脱了Java GC的管理。
    在这里插入图片描述
  • DS 提供Encoder,能够在不反序列化整个对象的情况下,进行操作
Parquet数据格式

Parquet是专门针对大数据的一种数据格式。

  • 它是列式存储格式
  • 是大数据时代文件存储的首选标准
  • 同时,Parquet是Spark默认的存储格式

在之前我们保存的日志文件是很有可能存在如下图所示的嵌套数据格式的,传统操作就是把嵌套的对象Json序列化,需要使用的时候再反序列化,然而序列化是耗时的,有没有既能存储,又不需要序列化、反序列化呢?Parquet可以!
在这里插入图片描述

DataFrame API介绍

创建DataFrame

1.结构化数据创建DataFrame

支持Parquet文件和JSON文件

  • 对于Parquet,可以用load()
  • 对于JSON,还需要使用format(),之后再load,例如context.read.fomrat(json).load(url)
2.外部数据库创建DataFrame

Spark SQL可以从外部数据库创建DF,方法是基于JDBC或者ODBC,下面以JDBC为例

val jdbcDF = sqlContext.read.format("jdbc").options(数据库连接相关参数)
3.基于RDD创建DataFrame

Spark SQ可以基于RDD创建DataFrame,从数据源导入文件为RDD之后,对RDD可以map处理之后再toDF()

4. 基于Hive表创建DataFrame

使用本方式,需要先创建HiveContext,执行hiveContext.sql(),返回结果即为DF。

DF常用查询方法

  • where :条件查询
  • groupby:分组
  • orderby:排序
  • join :连接
  • limit : 限制n条记录
  • filter:与where功能相同
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值