本次作业的要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339
前言
本次作业是在《爬虫大作业》的基础上进行的,在《爬虫大作业》中,我主要对豆瓣网各类型书籍进行数据爬取,最终得到了2641条数据存在一个名为lagoupy.xls中。本次作业的任务主要有以下三点:
1.对CSV文件进行预处理生成无标题文本文件,将爬虫大作业产生的csv文件上传到HDFS
2.把hdfs中的文本文件最终导入到数据仓库Hive中,在Hive中查看并分析数据
3.用Hive对爬虫大作业产生的进行数据分析(10条以上的查询分析)
数据预处理
由于我们爬取下来的数据并不是全部都是我们所要的,或者是有一些数据需要进行加工才可以用到,这时候数据的预处理就必不可少了,原始的数据如下图所示。

1.删除重复值
如果数据中存在重复记录, 而且重复数量较多时, 势必会对结果造成影响, 因此我们应当首先处理重复值。打开lagoupy.xls文件,选中岗位id这一列数据,选择数据——>删除重复值,对重复值进行删除,删除重复值后,我们可以发现,数据从原来的5000条变成4676条。
2.过滤无效数据
由于某些数据对我们的数据分析并无用处,所以对于这一部分数据我们可以不要,在这里发布时间是无效数据,所以我们可以直接删除这一列。
3.添加序号
由于我们的数据是要存进数据库的,所以在这里我添加了序号这一列,给我们的数据进行编号,以便于后期我们对数据的分析。此外,为了方便后续的工作,我在这里将文件另存为csv格式,需要注意的是:在保存类型中我们选择CSV UTF-8(逗号分隔)。
经过上述几个步骤后,我们最终可以得到一个经过数据预处理的csv文件,如下图所示。
大数据分析
首先,我们需要在本地中创建一个/usr/local/bigdatacase/dataset文件夹,具体的步骤为:
① cd /usr/local
② sudo mkdir biggdatacase
③ cd biggdatacase/
④ sudo mkdir dataset
⑤ cd dataset/
如下图所示:
其次,我们把lagoupy.csv文件放到下载这个文件夹中,并使用命令把lagoupy.csv文件拷贝到我们刚刚所创建的文件夹中,具体步骤如下:
① sudo cp /home/hadoop/下载/test.csv /usr/local/biggdatacase/dataset/ #把test.csv文件拷到刚刚所创建的文件夹中
② head -5 test.csv #查看这个文件的前五行
对CSV文件进行预处理生成无标题文本文件,步骤如下:
① sudo sed -i '1d' test.csv #删除第一行记录
② head -5 test.csv #查看前五行记录
接着,启动hadoop,步骤如下:
① start-all.sh #启动hadoop
② jps #查看hadoop是否启动成功
最后,我们把本地的文件上传至HDFS中,步骤如下:
① hdfs dfs -mkdir -p /biggdatacase/dataset #在hdfs上新建/bigdatacase/dataset
② hdfs dfs -ls /
③ hdfs dfs -put ./test.csv /biggdatacase/dataset #把本地文件lagoupy.csv上传至hdfs中
④ hdfs dfs -ls /biggdatacase/dataset #查看
⑤ hdfs dfs -cat /biggdatacase/dataset/test.csv | head -5 #查看hdfs中lagoupy.csv的前五行
2.把hdfs中的文本文件最终导入到数据仓库Hive中
首先,启动hive,步骤如下:
① service mysql start #启动mysql数据库
② cd /usr/local/hive
③ ./bin/hive #启动hive
其次,把hdfs中的文本文件最终导入到数据仓库Hive中,并在Hive中查看并分析数据,具体步骤如下:
① create database dbpy; -- 创建数据库dbpy
② use dbpy;
③ create external table lagou_py(id int,positionID string,city string,companyFullName string,companyLabelList string,district string,education string,firstType string,positionName string,salary string,workYear string) row format delimited fields terminated by ',' stored as textfile location '/bigdatacase/dataset/'; -- 创建表lagou_py并把hdfs中/bigdatacase/dataset/目录下的数据加载到表中
④ select * from lagou_py limit 10; -- 查看lagou_py中前10行的数据
查询数据量:
查询不重复数据量:
1.销量最多的作者经过查询发现是鲁迅:
select MAX(pID) from labb;
2.查询评论量大于5w的书籍:
select name from labb where pinglun>49999;
3.查询销量大于1w5的书籍有哪些:
select name,pinglun from labb wherexiaoliang>15000;
4.查询了小说有哪些书籍:
select name,pID from labb where pID=‘小说’;
5.查询了童话有哪些书籍;
select name,pID from labb where pID='童话';
6.查询杂文的数量:
select count(*) from labb where pID=‘杂文’;
7.根据销量排序分类为童话:
select * from labb where pID = '童话' order by xiaoliang desc;
8.查询销量大于5w,并且前20名
select name,xiaoliang from labb where xiaoliang>50000 limit 20;
9.查询销量大于1w5的书籍有哪些:
10.查询了小说有哪些书籍: