spark学习(6)之SparkSQL基础
⼀、Spark SQL的基础:
1、Spark SQL的简介
Spark SQL is Apache spark’s module for working with structured data
Spark SQL 是apache spark⽤来出来结构化数据的模块
特点:
(1)容易集成成,安装好spark后就带有spark sql了
(2)统⼀的数据访问接⼝DataFrame
(3)兼容hive
(4)⽀持标准的数据访问⽅式:JDBC,ODBC
2、SparkSQL的核⼼数据模型是DataFrame:它的表现形式其实也是RDD
sql容易学吗表(DataFrame) = 表结构(Schema) + 数据(RDD)
3、创建DataFrame:DataFrame仅⽀持DSL语句
(1)样本类case class
⽰例(使⽤员⼯表):
a、创建样本类型
case class Emp(empno:Int,ename:String,job:String,mgr:Int,hiredate:String,sal:Int,comm:Int,deptno:Int)
返回⼀个defined class Emp表⽰这个类已经定义好了
b、 读⼀⼀个数据(我们可以从hdfs上读取,因为是⽰例所以我们直接本地⽂件上读取了)
val File("/root/training/emp.csv").map(_.split(","))
我们可以看到RDD⾥边是⼀个数组类型
c、把数组类型的RDD映射成RDD[Emp]
val emp=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))
d、转化成Spark SQL的核⼼数据模型DataFrame
val DF
然后我们可以查看表结构,可以使⽤DSL语句操作DataFrame
//查看表结构
df.printSchema
查询所有的数据
df.show
也可查询具体的⼏个字段
df.select("ename","sal").show
(2)sparksession
4、创建视图(要⽤到sparksession对象)
在sparkShell客户端打开的时候就⾃动创建了俩个对象,⼀个SparkContext对象叫sc,⼀个是SparkSession对象叫spark
创建视图是为了我们使⽤标准的sql语句来操作DataFrame,因为DataFrame仅⽀持DSL语句,所以我们需要把DataFrame转换成视图来⽤标准语句进⾏操作。
视图⼜分为局部视图和全局视图
局部视图:仅在当前session中有效
spark.sql("select * from emp1").show
spark.sql("select ename,sal from emp1").show
全局视图:可以在不同的session中访问,单独创建在global_temp的命名空间中
ateGlobalTempView("emp2")
但是这⾥查询语句稍微和局部视图有点区别,因为他是创建在global_temp命名空间下的
我们先看⼀下异常语句
spark.sql("select * from emp2").show
org.apache.spark.sql.AnalysisException: Table or view not found: emp2; line 1 pos 14他就会报⼀个这样的错,这是我们写的sql语句的问题
spark.sql("select * from p2").show
这样就正常了。然后我们看看局部视图和全局视图的区别,然后我们在当前spark-shell下重新的开启⼀个wSession.sql("select * from emp1").show
我们执⾏局部视图的语句的时候就会出现这样的错误
然后我们新开个session执⾏全局视图查询
这回就正常了

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。