Spark SQL

实验目的

1.理解Spark SQL工作原理;

2.掌握Spark SQL使用方法。

实验内容

​ 现有一份汽车销售记录(文件名:Cars.csv),销售记录包括时间、地点、邮政编码、车辆类型等信息,每条记录信息包含39项数据项。按步骤完成如下操作(建议在Spark-shell中完成):

​ (1)将汽车销售记录上传至HDFS;

​ (2)使用编程方式定义RDD模式,提取月、市、区县、品牌、车辆类型、使用性质和数量7列,并定义相应Schema;

​ (3)将(2)的结果以json格式保存至HDFS;

​ (4)读取该json文件,构建DataFrame;

​ (5)在DataFrame中使用SQL语句实现如下查询:

​ ① 统计各汽车品牌的销量,并按销量从高到低排序;

​ ② 统计各月各汽车品牌的销量;

​ ③ 统计各市的汽车销量,并按销量从低到高排序;

​ ④ 统计不同城市不同车辆类型的销量;

​ ⑤ 统计各城市汽车销量最大的区县;

​ ⑥ 统计1~6月非营运车辆销量最大的前3大品牌。

实验步骤

将汽车销售记录上传至HDFS

使用编程方式定义RDD模式,提取月、市、区县、品牌、车辆类型、使用性质和数量7列,并定义相应Schema;

  • 加载数据为Dataset

    scala> val d1=spark.read.csv("hdfs:/Cars.csv")
    
  • 用编程方式定义RDD,提取关键字段,定义相应的Schema

    scala> import org.apache.spark.sql.types._
    scala> import org.apache.spark.sql.Row
    scala> val files = Array(StructField("month",IntegerType,true), StructField("city",StringType,true), StructField("county",StringType,true), StructField("brand",StringType,true), StructField("carType",StringType,true), StructField("nature",StringType,true), StructField("quantity",IntegerType,true))
    
    • 定制Schema
    scala> val mySchema = StructType(files)
    
    • 读入数据产生RDD
    scala> val carsRDD = spark.sparkContext.textFile("/Cars.csv")
    
    • 分割数据
    scala> val rowRDD = carsRDD.map(_.split(",")).map(line => Row(line(0).trim.toInt,line(1),line(2),line(3),line(4),line(5),line(6).trim.toInt))
    
    • 表头和数据拼接
    scala> val carsDF = spark.createDataFrame(rowRDD,mySchema)
    
    • 查看数据
    scala> carsDF.show()
    

  • json格式保存结果到hdfs
scala> carsDF.write.format("json").save("/car.json")
  • 读取json文件,构建DataFrame
scala> val cdf = spark.read.json("/car.json")
  • 在DataFrame上船舰一个临时视图“cars”
scala> cdf.createTempView("cars")
  • 在DataFrame中使用SQL语句实现如下查询:

    ​ ① 统计各汽车品牌的销量,并按销量从高到低排序;

scala> val r1 = spark.sql("select brand,sum(quantity) as c1 from cars group by brand order by c1 desc")

​ ② 统计各月各汽车品牌的销量;

scala> val r2 = spark.sql("select brand,month,sum(quantity) from cars group by brand,month order by month")

​ ③ 统计各市的汽车销量,并按销量从低到高排序;

scala> val r3 = spark.sql("select city,sum(quantity) as c1 from cars group by city order by c1 desc")

​ ④ 统计不同城市不同车辆类型的销量;

scala> val r4 = spark.sql("select city,carType,sum(quantity) from cars group by city,carType order by city")

​ ⑤ 统计各城市汽车销量最大的区县;

scala> val r5 = spark.sql("select a.city,a.county,max(a.c1) from (select city,county,sum(quantity) as c1 from cars group by city,county)a group by a.city,a.county ")

​ ⑥ 统计1~6月非营运车辆销量最大的前3大品牌。

scala> val r6 = spark.sql("select a.brand from (select brand,nature,sum(quantity) as c1 from cars where month between 1 and 6 and nature like '___'  group by brand,nature order by c1 desc)a limit 3")

踩过的坑

1、本次实验数据不知道哪里有问题,直接使用的话,在存储或者查询的时候,总会报错,说是有一个“客车”String被填入到一个Int类型里了。所以最后是直接处理原数据,把所有用不到的列直接删掉了。然后就没问题了。

2、spark sql中的查询不能使用中文,就很奇怪。用了echo $LANG查看语言发现也是UTF-8,实在找不到问题我就直接用like '___'解决了

Spark SQL练习相关推荐

  1. Spark SQL基本操作以及函数的使用

    2019独角兽企业重金招聘Python工程师标准>>> 引语: 本篇博客主要介绍了Spark SQL中的filter过滤数据.去重.集合等基本操作,以及一些常用日期函数,随机函数,字 ...

  2. Spark SQL与外部数据源的操作(Spark SQL ——> CSV/JSON/Parquet/hive/mysql)

    目录 一.Spark SQL支持的外部数据源 二.Spark SQL -> CSV 2.1 读CSV文件 a.有列名 b.无列名 2.2 写CSV文件 三.Spark SQL -> JSO ...

  3. 【Spark Summit East 2017】Spark SQL:Tungsten之后另一个可以达到16倍速度的利器

    更多精彩内容参见云栖社区大数据频道https://yq.aliyun.com/big-data:此外,通过Maxcompute及其配套产品,低廉的大数据分析仅需几步,详情访问https://www.a ...

  4. 【未完成】[Spark SQL_2] 在 IDEA 中编写 Spark SQL 程序

    0. 说明 在 IDEA 中编写 Spark SQL 程序,分别编写 Java 程序 & Scala 程序 1. 编写 Java 程序 待补充 2. 编写 Scala 程序 待补充 转载于:h ...

  5. spark sql 本地调试_Spark精华问答|Spark的三种运行模式有何区别?

    戳蓝字"CSDN云计算"关注我们哦! Spark是一个针对超大数据集合的低延迟的集群分布式计算系统,比MapReducer快40倍左右,是hadoop的升级版本,Hadoop作为第 ...

  6. spark SQL学习(综合案例-日志分析)

    日志分析 scala> import org.apache.spark.sql.types._ scala> import org.apache.spark.sql.Rowscala> ...

  7. Adaptive Execution让Spark SQL更高效更好用

    本文所述内容均基于 2018年9月17日 Spark 最新 Spark Release 2.3.1 版本,以及截止到 2018年10月21日 Adaptive Execution 最新开发代码.自动设 ...

  8. Spark SQL中出现 CROSS JOIN 问题解决

    Spark SQL中出现 CROSS JOIN 问题解决 参考文章: (1)Spark SQL中出现 CROSS JOIN 问题解决 (2)https://www.cnblogs.com/yjd_hy ...

  9. 【Spark】Spark SQL, DataFrames and Datasets Guide(翻译文,持续更新)

    本文主要是翻译Spark官网Spark SQL programming guide .只能保证大概意思,尽量保证细节.英文水平有限,如果有错误的地方请指正,轻喷.目录导航在右上角 Spark SQL. ...

  10. hive编程指南电子版_第三篇|Spark SQL编程指南

    在<第二篇|Spark Core编程指南>一文中,对Spark的核心模块进行了讲解.本文将讨论Spark的另外一个重要模块--Spark SQL,Spark SQL是在Shark的基础之上 ...

最新文章

  1. windows phone发布时其他注意事项
  2. 多线程1.学习资料2.面试题3.知识点
  3. python客户端和服务端区别_Python socket 客户端和服务器端
  4. 操作系统-命令解释程序(实验一)
  5. vue基于element-ui的三级CheckBox复选框
  6. 【面试招聘】阿里、腾讯 | 算法岗面试复盘
  7. 阿里云帮助江苏省财政厅力推统一公共支付平台
  8. linux进程通讯-纯文本文件
  9. 番茄工作法—《可以量化的管理学》
  10. (十三)RabbitMQ使用详解
  11. 图论——Dijkstra+prim算法涉及到的优先队列(二叉堆)
  12. leetcode 376. 摆动序列 思考分析
  13. oracle pl/sql 面试,Oracle SQL 面试题(整理)
  14. jquery中prop()和attr()的使用
  15. HTML和CSS 基本要点必看
  16. 判断客户端是否安装FlashPlayer及版本
  17. 基于logistic模型,GM模型和Leslie模型全国人口预测
  18. Java开发手册(嵩山版)
  19. 谈:典型三种近场通信的特点以及未来趋势
  20. python3_实现BP神经网络 + BP神经网络应用实例

热门文章

  1. tomcat下载安装步骤(超详细)
  2. log4cpp 概述与基本使用实例(一)
  3. 软件评测师考试需要知道什么?
  4. 个人作业——软件工程实践总结作业
  5. 关于文件、文件夹加密隐藏原理的一点想法
  6. 航模飞机设计基础知识
  7. 写给准备用mcafee8.5i企业版的朋友
  8. 我的世界电脑正版服务器地址大全,我的世界服务器地址有哪些_服务器地址大全_3DM网游...
  9. 声网 视频通话SDK小结
  10. 《Hadoop权威指南》知识点整理5