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
表(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 lines=sc.textFile("/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=emp.toDF

在这里插入图片描述
然后我们可以查看表结构,可以使用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中有效

df.createOrReplaceTempView("emp1")
spark.sql("select * from emp1").show
spark.sql("select ename,sal from emp1").show

在这里插入图片描述
在这里插入图片描述
全局视图:可以在不同的session中访问,单独创建在global_temp的命名空间中

df.df.createGlobalTempView("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 global_temp.emp2").show

在这里插入图片描述
这样就正常了。然后我们看看局部视图和全局视图的区别,然后我们在当前spark-shell下重新的开启一个session

spark.newSession.sql("select * from emp1").show 

我们执行局部视图的语句的时候就会出现这样的错误
在这里插入图片描述
然后我们新开个session执行全局视图查询

spark.newSession.sql("select * from global_temp.emp2").show 

在这里插入图片描述
这回就正常了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枣泥馅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值