Spark-SQL

SparkSQL

概述:
sparkSQL是spark用来处理结构化数据的一个模块。
sparkSQL提供了一个编程的抽象叫做DataFrame并且作为我们分布式SQL的查询引擎

作用:用来处理结构化数据,先将非结构化的数据转成结构化数据。

SparkSQL提供了两种编程模型:
1)SQL的方式 select * from user;
2)DataFrame方式(DSL)
HQL:将SQL转换为mr任务
SparkSQL:将SQL转换为RDD,效率快

特点:
1)容易整合 spark
2)统一数据的访问方式
3)标准的数据连接
支持JDBC/ODBC,可以对接BI工具
4)兼容HIVE

DataFrame

与RDD类似,DataFrame也是一个分布式数据容器。
SparkSQL属于SQL解析引擎。在spark,将SQL解析RDD。注意:这个RDD比较特殊,是
带有schema信息的RDD。
这个RDD就叫DataFrame。
DataFrame像数据库的二维表格(有行有列表描述),它除了数据之外还记录了数据的
结构信息(schema)。

与RDD区别:
DataFrame:存放了结构化数据的描述信息
RDD:存储文本数据、二进制、音频、视频…

思考?如果我想用SQL,我要先干什么?

SQL风格的操作

一. 创建sparkSession

SparkSQL程序的入口:SparkSession(2.0以后引入的统一访问方式。可以访问所有的Spark组件。)

二.读取数据

方式一: 直接读(textFile)
方式二: 读取指定格式的文件,直接创建DF

三.通过schema创建DF
通过方式一读取数据,我们需要得到schema信息,然后通过创建Row来映射列对应schema信息,这样我们才能创建DF,或者通过case样例类(直接toDF)

		case class 特点:
				可以支持模式匹配,使用case class建立表结构
				
						7521,       WARD,      SALESMAN,7698,     1981/2/22,     1250,     500,      30
		
		case class Emp(empno:Int,ename:String,job:String,mgr:Int,hiredate:String,sal:Int,comm:Int,deptno:Int)
		
		2、读取文件
		val lines = sc.textFile("/usr/local/tmp_files/emp.csv").map(_.split(","))
		
		3、把每行数据,映射到Emp上。
		val allEmp = lines.map(x => Emp(x(0).toInt,x(1),x(2),x(3).toInt,x(4),x(5).toInt,x(6).toInt,x(7).toInt))
		
		4、生成DataFrame
		val df1 = allEmp.toDF
		
		df1.show

(此时,df.show()就可以看到一个表数据了,此时,我们有两种方式来操作这个表)
方式一:SQL的方式
(常用,毕竟大数据的最终目的就是使用SQL的思想来操作大量的数据)

1.创建视图(临时表)
因为通过sql操作表,我们后面肯定要知道表名,通过创建视图给到表名,我们才可以操作嘛。
此时有两种方式
(1)createOrReplaceTempView,createTempView,createGlobalTempView
(分别是以Session为生命周期和以全局的application为生命周期,可以通过stop()给删掉,在spark缓存中)
(2)registerTempTable(过时)
 在Spark的早期版本,我们使用registerTempTable来注册Dataframe。然而在Spark 2.0中,这个API已经被遗弃了。registerTempTable名字很让人误解,因为用户会认为这个函数会将Dataframe持久化并且保证这个临时表,但是实际上并不是这样的,所以社区才有意将它替换成createTempView。
 2.操作表
 此时通过之前Session对象.sql(sql)来操作数据
方式二: DSL的方式(不用创建视图)
df1.select( " e n a m e " , "ename",

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值