大数据与技术测试
1、 数据采集(要求至少爬取三千条记录,时间跨度超过一星期):(10分)
要求Python 编写程序爬取京东手机的评论数据,生成Json形式的数据文件。
京东商城部分数据格式如下图所示:
- "productCommentSummary": {
- "goodRateShow": 95, //好评率
- "poorRateShow": 3, //差评率
- "poorCountStr": "1900+",
- "averageScore": 5, //平均分
- "generalCountStr": "1600+",
- "oneYear": 0,
- "showCount": 21000,
- "showCountStr": "2.1万+",
- "goodCount": 64000, //好评数
- "generalRate": 0.024,
- "generalCount": 1600, //中评数
- "skuId": 4432058,
- "goodCountStr": "6.4万+",
- "poorRate": 0.028,
- "afterCount": 2400,
- "goodRateStyle": 142,
- "poorCount": 1900, //差评数
- "skuIds": null,
- "poorRateStyle": 4,
- "generalRateStyle": 4,
- "commentCountStr": "6.8万+",
- "commentCount": 68000,
- "productId": 4432058, //商品id
- "afterCountStr": "2400+",
- "goodRate": 0.948,
- "generalRateShow": 2 //中评率
- },
comments中一条评论的结构:
- “id": 10432588299,
- “guid": "6c1d83b1-ac45-4189-a041-774eaff87df9",
- “content": "割手,相当的割手,无语了", //评论内容 √
- “creationTime": "2017-05-22 23:37:24", //写评论的时间 √
- “isTop": false, //是否置顶
- “referenceTime": "2017-05-20 18:35:11", //收货时间 √
- “firstCategory": 9987, //第一分类 √
- “secondCategory": 653, //第二分类 √
- “thirdCategory": 655, //第三分类 √
- “replyCount": 0,
- “score": 3, //打分 √
- “nickname": "j***柜", //昵称 √
- “userClient": 2,
- “productColor": "碳黑色",
- “productSize": "32GB",
- “userLevelName": "金牌会员", //会员级别 √
- “plusAvailable": 0,
- “productSales": [
- {
- "dim": 3,
- "saleName": "选择套装",
- "saleValue": "官方标配"
- }
- ,
- “userClientShow": "来自京东iPhone客户端",//评论设备
- “isMobile": true, //是否移动端
- “days": 2, //评论时间距【收货/下单】时间多长时间
- “afterDays": 0
2、数据预处理:要求使用MapReduce或者kettle实现源数据的预处理,对大量的Json文件,进行清洗,以得到结构化的文本文件。(10分)
(1)去除用户评论表的重复记录;
(2)按照清洗后的数据格式要求提取相应的数据字段。
清洗后的标准文本格式:
- "id": 10432588299,
- "guid": "6c1d83b1-ac45-4189-a041-774eaff87df9",
- "content": "割手,相当的割手,无语了", //评论内容 √
- "creationTime": "2017-05-22 23:37:24", //写评论的时间 √
- "isTop": false, //是否置顶
- "referenceTime": "2017-05-20 18:35:11", //收货时间 √
- "score": 3, //打分 √
- "nickname": "j***柜", //昵称 √
- "userLevelName": "金牌会员", //会员级别 √
- "userClientShow": "来自京东iPhone客户端",//评论设备
- "isMobile": true, //是否移动端
- "days": 2, //评论时间距【收货/下单】时间多长时间
3、 数据统计:生成Hive用户评论数据:(15分)
(1)在Hive创建一张表,用于存放清洗后的数据,表名为pinglun,字段名、字符类型、字段解释如下:
- productid string 产品ID
- commentcount int 评论数
- goodcount int 好评数
- generalcount int 中评数
- poorcount int 差评数
- goodrateshow float 好评率
- generalrateshow float 中评率
- poorrateshow float 差评率
- guid string 随机生成ID
- content string 评论内容
- creationtime string 写评论的时间
- score int 打分
- nickname string 昵称
- userlevelname string 会员级别
- userclientshow string 评论设备
- ismobile string 是否移动端
- 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,实现数据动态实时的采集、分析、展示数据。
具体工作流程如下图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2021-03-20 学习进度16