大数据课程——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大品牌。
?
问题总结
课程提供的源数据有问题
本次实验数据不知道哪里有问题,直接使用的话,在存储或者查询的时候,总会报错,说是有一个“客车”String被填入到一个Int类型的“格子”里了。报错如下图。所以最后我是直接处理原数据,把所有用不到的列直接删掉了。然后就没问题了。 ?
关于第5大题的第6个查询题
最后一个查询题,不能直接用Spark.sql()方法,因为在填写where条件,characteristic=“非营运”会报错,我也不知道是什么错误,后来分为两次筛选才完成了实验。
?
Spark-shell卡顿
另外本次实验过程中,遇到很头疼的一个问题就是,Spark-shell总是会莫名其妙卡主,然后就输入不了任何东西,必须要整个spark-shell停止了再次开启才行,但这样的话又会导致数据丢失,因此浪费了大量时间。
? ?
具体实验步骤
?
将汽车销售记录上传至HDFS
此处图片中显示的文件名为Cars2.csv,是因为我对课程所提供的文件进行过初步处理,原因可见“问题总结”。
将原始数据上传到HDFS的/input文件夹中 ?
?
使用编程方式定义RDD模式,提取月、市、区县、品牌、车辆类型、使用性质和数量7列,并定义相应Schema
? ?
?
将上一步的结果以json格式保存至HDFS
? ?
?
读取该json文件,构建DataFrame
?
在DataFrame中使用SQL语句实现查询
在这一部分当中,所使用的的查询语句均在图片当中以红框形式标出。
(1)统计各汽车品牌的销量,并按销量从高到低排序
?
(2)统计各月各汽车品牌的销量
?
(3)统计各市的汽车销量,并按销量从低到高排序
?
(4)统计不同城市不同车辆类型的销量
?
(5)统计各城市汽车销量最大的区县
?
(6)统计1~6月非营运车辆销量最大的前3大品牌
|