Spark SQL练习
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练习相关推荐
- Spark SQL基本操作以及函数的使用
2019独角兽企业重金招聘Python工程师标准>>> 引语: 本篇博客主要介绍了Spark SQL中的filter过滤数据.去重.集合等基本操作,以及一些常用日期函数,随机函数,字 ...
- 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 ...
- 【Spark Summit East 2017】Spark SQL:Tungsten之后另一个可以达到16倍速度的利器
更多精彩内容参见云栖社区大数据频道https://yq.aliyun.com/big-data:此外,通过Maxcompute及其配套产品,低廉的大数据分析仅需几步,详情访问https://www.a ...
- 【未完成】[Spark SQL_2] 在 IDEA 中编写 Spark SQL 程序
0. 说明 在 IDEA 中编写 Spark SQL 程序,分别编写 Java 程序 & Scala 程序 1. 编写 Java 程序 待补充 2. 编写 Scala 程序 待补充 转载于:h ...
- spark sql 本地调试_Spark精华问答|Spark的三种运行模式有何区别?
戳蓝字"CSDN云计算"关注我们哦! Spark是一个针对超大数据集合的低延迟的集群分布式计算系统,比MapReducer快40倍左右,是hadoop的升级版本,Hadoop作为第 ...
- spark SQL学习(综合案例-日志分析)
日志分析 scala> import org.apache.spark.sql.types._ scala> import org.apache.spark.sql.Rowscala> ...
- Adaptive Execution让Spark SQL更高效更好用
本文所述内容均基于 2018年9月17日 Spark 最新 Spark Release 2.3.1 版本,以及截止到 2018年10月21日 Adaptive Execution 最新开发代码.自动设 ...
- Spark SQL中出现 CROSS JOIN 问题解决
Spark SQL中出现 CROSS JOIN 问题解决 参考文章: (1)Spark SQL中出现 CROSS JOIN 问题解决 (2)https://www.cnblogs.com/yjd_hy ...
- 【Spark】Spark SQL, DataFrames and Datasets Guide(翻译文,持续更新)
本文主要是翻译Spark官网Spark SQL programming guide .只能保证大概意思,尽量保证细节.英文水平有限,如果有错误的地方请指正,轻喷.目录导航在右上角 Spark SQL. ...
- hive编程指南电子版_第三篇|Spark SQL编程指南
在<第二篇|Spark Core编程指南>一文中,对Spark的核心模块进行了讲解.本文将讨论Spark的另外一个重要模块--Spark SQL,Spark SQL是在Shark的基础之上 ...
最新文章
- windows phone发布时其他注意事项
- 多线程1.学习资料2.面试题3.知识点
- python客户端和服务端区别_Python socket 客户端和服务器端
- 操作系统-命令解释程序(实验一)
- vue基于element-ui的三级CheckBox复选框
- 【面试招聘】阿里、腾讯 | 算法岗面试复盘
- 阿里云帮助江苏省财政厅力推统一公共支付平台
- linux进程通讯-纯文本文件
- 番茄工作法—《可以量化的管理学》
- (十三)RabbitMQ使用详解
- 图论——Dijkstra+prim算法涉及到的优先队列(二叉堆)
- leetcode 376. 摆动序列 思考分析
- oracle pl/sql 面试,Oracle SQL 面试题(整理)
- jquery中prop()和attr()的使用
- HTML和CSS 基本要点必看
- 判断客户端是否安装FlashPlayer及版本
- 基于logistic模型,GM模型和Leslie模型全国人口预测
- Java开发手册(嵩山版)
- 谈:典型三种近场通信的特点以及未来趋势
- python3_实现BP神经网络 + BP神经网络应用实例