大数据与技术测试

1、 数据采集(要求至少爬取三千条记录,时间跨度超过一星期10分)

要求Python 编写程序爬取京东手机的评论数据,生成Json形式的数据文件

京东商城部分数据格式如下图所示:

  1. "productCommentSummary": {  
  2. "goodRateShow": 95, //好评率  
  3. "poorRateShow": 3, //差评率  
  4. "poorCountStr": "1900+",  
  5. "averageScore": 5, //平均分  
  6. "generalCountStr": "1600+",  
  7. "oneYear": 0,  
  8. "showCount": 21000,  
  9. "showCountStr": "2.1+",  
  10. "goodCount": 64000, //好评数  
  11. "generalRate": 0.024,  
  12. "generalCount": 1600, //中评数  
  13. "skuId": 4432058,  
  14. "goodCountStr": "6.4+",  
  15. "poorRate": 0.028,  
  16. "afterCount": 2400,  
  17. "goodRateStyle": 142,  
  18. "poorCount": 1900, //差评数  
  19. "skuIds": null,  
  20. "poorRateStyle": 4,  
  21. "generalRateStyle": 4,  
  22. "commentCountStr": "6.8+",  
  23. "commentCount": 68000,  
  24. "productId": 4432058, //商品id  
  25. "afterCountStr": "2400+",  
  26. "goodRate": 0.948,  
  27. "generalRateShow": 2 //中评率  
  28. },  

comments中一条评论的结构:

 

  1. “id": 10432588299,  
  2. “guid": "6c1d83b1-ac45-4189-a041-774eaff87df9",  
  3. “content": "割手,相当的割手,无语了", //评论内容 √  
  4. “creationTime": "2017-05-22 23:37:24", //写评论的时间 √  
  5. “isTop": false,                        //是否置顶  
  6. “referenceTime": "2017-05-20 18:35:11", //收货时间 √  
  7. “firstCategory": 9987,                 //第一分类 √  
  8. “secondCategory": 653,                 //第二分类 √  
  9. “thirdCategory": 655,                  //第三分类 √  
  10. “replyCount": 0,  
  11. “score": 3,                            //打分 √  
  12. “nickname": "j***",                  //昵称  √  
  13. “userClient": 2,  
  14. “productColor": "碳黑色",  
  15. “productSize": "32GB",  
  16. “userLevelName": "金牌会员",           //会员级别 √  
  17. “plusAvailable": 0,  
  18. “productSales": [  
  19. {  
  20. "dim": 3,  
  21. "saleName": "选择套装",  
  22. "saleValue": "官方标配"  
  23. }  
  24. ,  
  25. “userClientShow": "来自京东iPhone客户端",//评论设备  
  26. “isMobile": true,                       //是否移动端  
  27. “days": 2,                              //评论时间距【收货/下单】时间多长时间  
  28. “afterDays": 0  

 

2数据预处理:要求使用MapReduce或者kettle实现源数据的预处理,对大量的Json文件,进行清洗,以得到结构化的文本文件。(10分)

1)去除用户评论表的重复记录;

2)按照清洗后的数据格式要求提取相应的数据字段。

 

清洗后的标准文本格式:

  1. "id": 10432588299,  
  2. "guid": "6c1d83b1-ac45-4189-a041-774eaff87df9",  
  3. "content": "割手,相当的割手,无语了",   //评论内容 √  
  4. "creationTime": "2017-05-22 23:37:24",  //写评论的时间 √  
  5. "isTop": false,                         //是否置顶  
  6. "referenceTime": "2017-05-20 18:35:11", //收货时间 √  
  7. "score": 3,                             //打分 √  
  8. "nickname": "j***",                   //昵称  √  
  9. "userLevelName": "金牌会员",            //会员级别 √  
  10. "userClientShow": "来自京东iPhone客户端",//评论设备  
  11. "isMobile": true,                       //是否移动端  
  12. "days": 2,                              //评论时间距【收货/下单】时间多长时间  

 

 

 

3、 数据统计生成Hive用户评论数据:(15分)

1Hive创建一张表,用于存放清洗后的数据,表名为pinglun,字段名、字符类型、字段解释如下:

  1. productid        string  产品ID  
  2. commentcount     int     评论数  
  3. goodcount        int     好评数  
  4. generalcount     int     中评数  
  5. poorcount        int     差评数  
  6. goodrateshow     float   好评率  
  7. generalrateshow  float   中评率  
  8. poorrateshow     float   差评率  
  9. guid             string  随机生成ID  
  10. content          string  评论内容  
  11. creationtime     string  写评论的时间  
  12. score            int     打分  
  13. nickname         string  昵称  
  14. userlevelname    string  会员级别  
  15. userclientshow   string  评论设备  
  16. ismobile         string  是否移动端  
  17. days             int     评论时间距【收货/下单】时间多长时间  

 

 

 

load data local inpath '/opt/software/jdpl.csv' into table pinglun;

 

load data local inpath '/opt/software/jdpl.csv' into table pinglun2;

需求1:分析用户使用移动端购买还是PC端购买,及移动端和PC端的用户比例,生成ismobilehive,存储统计结果;

Create table ismobilehive(

type string,

num int

)ROW format delimited fields terminated by ',' STORED AS TEXTFILE;

select count(*) from pinglun2 where ismobile='1';

select count(*) from pinglun2 where ismobile='0';

insert into ismobilehive(type,num) values('0',382);

insert into ismobilehive(type,num) values('1',996);

 select * from ismobilehive;

 

 

其中1代表移动端购买,共816人,0代表PC端购买,共174人。

需求2:分析用户评论周期(收到货后,一般多久进行评论),生成dayssql,存储统计结果;

create table dayssql as select day,count(*) from pinglun group BY day;

 

 

需求3:分析会员级别(判断购买此商品的用户级别),生成userlevelname_out,存储统计结果;

Create table userlevelname_out(

type string,

num int

)ROW format delimited fields terminated by ',' STORED AS TEXTFILE;

select count(*) from pinglun2 where userlevelname='1';

select count(*) from pinglun2 where userlevelname='0';

insert into userlevelname_out(type,num) values('0',512);

insert into userlevelname_out(type,num) values('1',861);

 

 

需求4:分析每天评论量,生成creationtime_out,存储统计结果;

create table creationtime_out as select creationTime,count(*) from pinglun group BY creationTime;

 

 

需求5日期格式标准化

功能为:去掉评论时间的时分秒,只保留年月日

 

 

4、 利用Sqoop进行数据迁移至Mysql数据库:(5分)

将上述五个表倒入到相对应的mysql数据表中

bin/sqoop export \

--connect jdbc:mysql://Hadoop102:3306/spark \

--username root \

--password 1229 \

--table ismobilehive \

--num-mappers 1 \

--export-dir /user/hive/warehouse/ismobilehive \

--input-fields-terminated-by ","

 

Dayssql

bin/sqoop export \

--connect jdbc:mysql://Hadoop102:3306/spark \

--username root \

--password 1229 \

--table dayssql \

--num-mappers 1 \

--export-dir /user/hive/warehouse/dayssql \

--input-fields-terminated-by "\001"

 

bin/sqoop export \

--connect jdbc:mysql://Hadoop102:3306/spark \

--username root \

--password 1229 \

--table userlevelname_out \

--num-mappers 1 \

--export-dir /user/hive/warehouse/userlevelname_out \

--input-fields-terminated-by ","

 

creationtime_out

 

bin/sqoop export \

--connect jdbc:mysql://Hadoop102:3306/spark \

--username root \

--password 1229 \

--table creationtime_out \

--num-mappers 1 \

--export-dir /user/hive/warehouse/creationtime_out \

--input-fields-terminated-by "\001"

 

 

bin/sqoop export \

--connect jdbc:mysql://Hadoop102:3306/spark \

--username root \

--password 1229 \

--table pinglun2 \

--num-mappers 1 \

--export-dir /user/hive/warehouse/pinglun2 \

--input-fields-terminated-by ","

 

 

5、 数据可视化:利用JavaWeb+Echarts完成数据图表展示过程(20分)

(实现前五步,获得60分)

需求1把用户对京东进行评论时使用的是客户端还是移动端的统计数据,用饼图进行数据展示,从而达到让观者能从中熟悉某个项目与整个数据组间所存在的比例关系的目的。

需求2把用户在收到货后,一般多久进行评论,即用户评论周期用柱状图展示,可以达到展现数据并将数据进行比较的目的。

需求3将购买某商品的用户级别进行统计的结果数据用饼状图展示,从而可以展现用户级别的比例构成关系,让观者能从中熟悉某个级别的用户数量与所有购买用户所存在的比例关系。

需求4将某件商品的每天的评论量的统计数据用折线图进行展现,可以展现出这个商品每天的评论量的变化趋势。

 

6、 中文分词实现用户评价分析。(20分)

1本节通过对商品评论表中的差评数据,进行分析,筛选用户差评点,以知己知彼。

2利用 python 结巴分词实现用户评价信息中的中文分词及词频统计;

3 hive 中新建词频统计表并加载分词数据;

要求实现

l ①实现用户评价信息中的中文分词;

l ②实现中文分词后的词频统计;

l  ③在 hive 中新建词频统计表加载分词数据;

 ④柱状图可视化展示用户差评的统计前十类。

 ⑤用词云图可视化展示用户差评分词。

 

7、利用Spark进行实时数据分析。(20分)

本实验以京东商品评论为目标网站,架构采用爬虫+Flume+Kafka+Spark Streaming+Mysql,实现数据动态实时的采集、分析、展示数据。

 

 

具体工作流程如下图:

 

posted @   哦心有  阅读(128)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2021-03-20 学习进度16
点击右上角即可分享
微信分享提示