spark sql 数据类型转换_Spark SQL重点知识总结

本文介绍了Spark SQL的基本概念、特点、数据抽象及查询方式。内容涵盖DataFrame和DataSet的转换,DataFrame与RDD的互操作,以及用户自定义函数(UDF、UDAF)的使用。此外,还详细讲解了Spark SQL如何与Hive集成,以及数据源的读写操作,并通过实际案例展示了如何解决业务问题。
摘要由CSDN通过智能技术生成

一、Spark SQL的概念理解

Spark SQL是spark套件中一个模板,它将数据的计算任务通过SQL的形式转换成了RDD的计算,类似于Hive通过SQL的形式将数据的计算任务转换成了MapReduce。

Spark SQL的特点:

1、和Spark Core的无缝集成,可以在写整个RDD应用的时候,配置Spark SQL来完成逻辑实现。

2、统一的数据访问方式,Spark SQL提供标准化的SQL查询。

3、Hive的继承,Spark SQL通过内嵌的hive或者连接外部已经部署好的hive案例,实现了对hive语法的继承和操作。

4、标准化的连接方式,Spark SQL可以通过启动thrift Server来支持JDBC、ODBC的访问,将自己作为一个BI Server使用

Spark SQL数据抽象:

1、RDD(Spark1.0)->DataFrame(Spark1.3)->DataSet(Spark1.6)

2、Spark SQL提供了DataFrame和DataSet的数据抽象

3、DataFrame就是RDD+Schema,可以认为是一张二维表格,劣势在于编译器不进行表格中的字段的类型检查,在运行期进行检查

4、DataSet是Spark最新的数据抽象,Spark的发展会逐步将DataSet作为主要的数据抽象,弱化RDD和DataFrame.DataSet包含了DataFrame所有的优化机制。除此之外提供了以样例类为Schema模型的强类型

5、DataFrame=DataSet[Row]

6、DataFrame和DataSet都有可控的内存管理机制,所有数据都保存在非堆上,都使用了catalyst进行SQL的优化。

Spark SQL客户端查询:

1、可以通过Spark-shell来操作Spark SQL,spark作为SparkSession的变量名,sc作为SparkContext的变量名

2、可以通过Spark提供的方法读取json文件,将json文件转换成DataFrame

3、可以通过DataFrame提供的API来操作DataFrame里面的数据。

4、可以通过将DataFrame注册成为一个临时表的方式,来通过Spark.sql方法运行标准的SQL语句来查询。

二、Spark SQL查询方式

1、DataFrame查询方式

1、DataFrame支持两种查询方式:一种是DSL风格,另外一种是SQL风格

(1)、DSL风格:

需要引入import spark.implicit._这个隐式转换,可以将DataFrame隐式转换成RDD

(2)、SQL风格:

a、需要将DataFrame注册成一张表格,如果通过CreateTempView这种方式来创建,那么该表格Session有效,如果通过CreateGlobalTempView来创建,那么该表格跨Session有效,但是SQL语句访问该表格的时候需要加上前缀global_temp

b、需要通过sparkSession.sql方法来运行你的SQL语句

2、DataSet查询方式

1、定义一个DataSet,先定义一个Case类

三、DataFrame、Dataset和RDD互操作

1、RDD->DataFrame:

1、普通方式:例如rdd.map(para(para(0).trim(),para(1).trim().toInt)).toDF("name","age")

2、通过反射来设置schema,例如:

#通过反射设置schema,数据集是spark自带的people.txt,路径在下面的代码中

case class Person(name:String,age:Int)

val peopleDF=spark.sparkContext.textFile("file:///root/spark/spark2.4.1/examples/src/main/resources/people.txt").map(_.split(",")).map(para=>Person(para(0).trim,para(1).trim.toInt)).toDF

peopleDF.show

#注册成一张临时表

peopleDF.createOrReplaceTempView("persons")

val teen=spark.sql("select name,age from pe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值