实验六:Spark Spark SQL实验

目录

学习目标:

学习内容:

实验环境:

基本概念:

Spark Streaming介绍:

实验步骤:

实验总结:


学习目标:

熟悉 Spark SQL 的使用方法。


学习内容:

类似于关系型数据库,SparkSQL也是语句也是由Projection(a1,a2, a3)、Data Source(tableA)、Filter(condition)组成,分别对应sql查询过 程中的Result、DataSource、Operation,也就是说SQL语句按Result-->Data Source-->Operation的次序来描述的。 执行Spark SQL语句的顺序为: 1.对读入的SQL语句进行解析(Parse),分辨出SQL语句中哪些词是关键词(如 SELECT、FROM、WHERE),哪些是表达式、哪些是Projection、哪些是Data Source 等,从而判断SQL语句是否规范; 2.将SQL语句和数据库的数据字典(列、表、视图等等)进行绑定(Bind),如 果相关的Projection、Data Source等都是存在的话,就表示这个SQL语句是可以执行 的; 3.一般的数据库会提供几个执行计划,这些计划一般都有运行统计数据,数据 库会在这些计划中选择一个最优计划(Optimize); 4.计划执行(Execute),按Operation-->Data Source-->Result的次序来进行 的,在执行过程有时候甚至不需要读取物理表就可以返回结果,比如重新运行刚运 行过的SQL语句,可能直接从数据库的缓冲池中获取返回结果


实验环境:

操作系统:Linux
开发环境:pyspark 交互式命令行

基本概念:

Spark SQL的特点:容易整合,统一的数据访问方式,兼容Hive,标准的数据连接。

Spark SQL与Hive SQL的区别:Hive SQL通过转换成MapReduce任务,然后提交到集群上执行,简化了编写MapReduce的程序的复杂性。但由于MapReduce这种计算模型执行效率比较慢,Spark SQL的应运而生。SparkSQL是一个SQL解析引擎,SQL解析成特殊RDD(DataFrame),然后在Spark集群中运行


Spark Streaming介绍:

什么是 Spark Streaming
Spark Streaming用于流式数据的处理,使得构建可扩展容错流应用程序变得容易。Spark Streaming具有易于使用、高容错性、高吞吐量等特点,它能够胜任实时的流计算,Spark Streaming 可以接收从 Socket、文件系统、Kafka、 Flume等数据源产生的数据,并对其进行实时处理。同时Spark Streaming 也能和机器学习库(MLlib)以及图计算库(Graphx)进行无缝衔接、实时在线分析。

 流数据加载:

初始化StreamingContext

from pyspark import SparkContext  #导入SparkContext包

from pyspark.streaming import StreamingContext

#导入Spark Streaming包

sc = SparkContext(master,appName)  #创建SparkContext对象

ssc = StreamingContext(sc,1)#创建DStream

#scc为DStream,可以通过type查看

type(ssc )

实验步骤:

#文件下载

wget http://10.90.45.135:8081/repository/hadoop/spark/book.txt

#输入代码

book=spark.read.text("file:///home/Desktop/book.txt")
#查看前五行

book.take(5)

#查看类型

 type(book)

 

#打印schema(表头和数据类型)

 book.printSchema()

#将book的DataFrame转换为RDD操作

 from pyspark.sql import Row
book_rdd=book.rdd.map(lambda x:x[0].split(",")).map(lambda x:Row(id=x[0],name=x[1],rating=x[2],price=x[3],publish=x[4],url=x[5]))

#创建dataFrame

 book_df=spark.createDataFrame(book_rdd)

#查询前五行数据

 book_df.show(5)

 

#打印schema

 book_df.printSchema()

 

#创建临时表

book_df.registerTempTable("tb_book")

#使用sql语句查询

spark.sql("select * from tb_book").show(15)

#模糊查询书名包含“微积分”的书

 spark.sql("select * from tb_book where name like '%微积分%'").show()

#输出图书的前10行的name和price字段信息

spark.sql("select name,price from tb_book ").show(10)

#计算所有书名包含“微积分”的评分平均值

spark.sql("select avg(rating) rating_avg from tb_book where name like '%微积
分%'")

#把书目按照评分从高到低进行排列

 spark.sql("select id,name,rating from tb_book order by rating desc").show(15)

#把图书按照出版社进行分组

 spark.sql("select publish,count(name) as cnt from tb_book group by publish order by cnt desc").show()


实验总结:

本次实验使我熟悉Spark SQL 的使用方法SparkSQL也是语句也是由Projection(a1,a2, a3)、Data Source(tableA)、Filter(condition)组成,分别对应sql查询过 程中的Result、DataSource、Operation,也就是说SQL语句按Result-->Data Source-->Operation的次序来描述的。本次学习对以后sparksql的学习奠定了基础,有利于后续学习

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

刘新源870

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

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

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

打赏作者

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

抵扣说明:

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

余额充值