文章目录

  • 前言
  • 当前环境
  • 用聚合函数 count() 计算出表内有多少条数据
  • 查出 user_id 不重复的数据的条数
  • 查询不重复的数据有多少条(为了排除客户刷单的情况)
  • 关键字条件查询分析
    • 查询双11那天有多少人购买了商品
    • 求当天购买的此品牌商品的数量
  • 根据用户行为分析
    • 查询一件商品在某天的购买比例或浏览比例
    • 查询双11那天,男女买家购买商品的比例
    • 给定购买商品的数量范围,查询某一天在该网站的购买该数量商品的用户id
  • 用户实时查询分析

前言

阅读此篇文章,需要先阅读前篇:

  1. 淘宝双11大数据分析(环境篇)
  2. 淘宝双11大数据分析(数据准备篇)

当前环境

使用 jps 查看当前启动的服务:(其中 Master 和 Worker是 Spark 的服务,不本篇无关)

[root@centos2020 dataset]# jps
11408 Master
12707 RunJar
7876 NameNode
8183 ResourceManager
7930 DataNode
8477 NodeManager
11550 Worker
12990 Jps

另外,本篇需要先启动 mysql ,hive服务(启动步骤请参考:淘宝双11大数据分析(数据准备篇))。

用聚合函数 count() 计算出表内有多少条数据

hive> select count(*) from user_log;

执行过程和结果(文章篇幅原因,后边的运行只展示结果,不展示过程):

WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
Query ID = root_20200226001346_be1efc88-10bf-4030-9509-62de994fb0d2
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:set mapreduce.job.reduces=<number>
Starting Job = job_1582623436135_0001, Tracking URL = http://centos2020:8088/proxy/application_1582623436135_0001/
Kill Command = /usr/hadoop/hadoop-2.7.7/bin/hadoop job  -kill job_1582623436135_0001
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
2020-02-26 00:14:53,555 Stage-1 map = 0%,  reduce = 0%
2020-02-26 00:15:16,085 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 3.0 sec
2020-02-26 00:15:39,527 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 6.35 sec
MapReduce Total cumulative CPU time: 6 seconds 350 msec
Ended Job = job_1582623436135_0001
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 6.35 sec   HDFS Read: 482200 HDFS Write: 105 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 350 msec
OK
10000
Time taken: 115.187 seconds, Fetched: 1 row(s)

结果是 10000 ,结果正确。因为在上一篇中,给该表中存的数据就是 10000 条。

查出 user_id 不重复的数据的条数

hive> select count(distinct user_id) from user_log;

结果:

MapReduce Jobs Launched:
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 5.41 sec   HDFS Read: 482582 HDFS Write: 103 SUCCESS
Total MapReduce CPU Time Spent: 5 seconds 410 msec
OK
358
Time taken: 45.244 seconds, Fetched: 1 row(s)

查询不重复的数据有多少条(为了排除客户刷单的情况)

hive> select count(*) from (select user_id,item_id,cat_id,merchant_id,brand_id,month,day,action from user_log group by user_id,item_id,cat_id,merchant_id,brand_id,month,day,action having count(*)=1)a;

结果:

MapReduce Jobs Launched:
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 6.93 sec   HDFS Read: 485070 HDFS Write: 116 SUCCESS
Stage-Stage-2: Map: 1  Reduce: 1   Cumulative CPU: 4.33 sec   HDFS Read: 5058 HDFS Write: 104 SUCCESS
Total MapReduce CPU Time Spent: 11 seconds 260 msec
OK
4754
Time taken: 89.299 seconds, Fetched: 1 row(s)

注意以上的查询语句中,要加上别名 a 否则会报错:

hive> select count(*) from (select user_id,item_id,cat_id,merchant_id,brand_id,month,day,action from user_log group by user_id,item_id,cat_id,merchant_id,brand_id,month,day,action having count(*)=1);
NoViableAltException(256@[])at org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser.atomjoinSource(HiveParser_FromClauseParser.java:2265)at org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser.joinSource(HiveParser_FromClauseParser.java:2475)at org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser.fromSource(HiveParser_FromClauseParser.java:1690)at org.apache.hadoop.hive.ql.parse.HiveParser_FromClauseParser.fromClause(HiveParser_FromClauseParser.java:1312)at org.apache.hadoop.hive.ql.parse.HiveParser.fromClause(HiveParser.java:42074)at org.apache.hadoop.hive.ql.parse.HiveParser.atomSelectStatement(HiveParser.java:36735)at org.apache.hadoop.hive.ql.parse.HiveParser.selectStatement(HiveParser.java:36987)at org.apache.hadoop.hive.ql.parse.HiveParser.regularBody(HiveParser.java:36633)at org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpressionBody(HiveParser.java:35822)at org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpression(HiveParser.java:35710)at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:2284)at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1333)at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:208)at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:77)at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:70)at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:468)at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1317)at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1457)at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1237)at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1227)at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:233)at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:184)at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:403)at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:821)at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:759)at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:686)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.hadoop.util.RunJar.run(RunJar.java:226)at org.apache.hadoop.util.RunJar.main(RunJar.java:141)
FAILED: ParseException line 1:22 cannot recognize input near '(' 'select' 'user_id' in joinSource

关键字条件查询分析

查询双11那天有多少人购买了商品

hive> select count(distinct user_id) from user_log where action='2';

结果:

MapReduce Jobs Launched:
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 5.76 sec   HDFS Read: 483409 HDFS Write: 103 SUCCESS
Total MapReduce CPU Time Spent: 5 seconds 760 msec
OK
358
Time taken: 49.434 seconds, Fetched: 1 row(s)

求当天购买的此品牌商品的数量

hive> select count(*) from user_log where action='2' and brand_id=2661;

结果:

MapReduce Jobs Launched:
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 6.46 sec   HDFS Read: 483258 HDFS Write: 101 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 460 msec
OK
3
Time taken: 52.679 seconds, Fetched: 1 row(s)

根据用户行为分析

查询一件商品在某天的购买比例或浏览比例

先查出有多少用户在这天购买了商品:

即关键字查询中那条语句:

select count(distinct user_id) from user_log where action='2';

其查询结果是 358。

再查出有多少用户点击了该商品:

即查询 user_id 不重复的数据条数:

select count(distinct user_id) from user_log;

其结果是 358。

也就是说比例是 358/358 = 1。

查询双11那天,男女买家购买商品的比例

先查出男性买家买商品的数量:

select count(*) from user_log where gender=1;

结果是:3299

再查出女性买家买商品的数量:

select count(*) from user_log where gender=0;

结果是:3361

因此男女比例是:3299 / 3361 大约等于 0.98

给定购买商品的数量范围,查询某一天在该网站的购买该数量商品的用户id

查询某一天在该网站购买商品超过5次的用户id:

select user_id from user_log where action='2' group by user_id having count(action='2')>5;

结果(篇幅原因,展示部分结果):

MapReduce Jobs Launched:
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 6.77 sec   HDFS Read: 483294 HDFS Write: 1304 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 770 msec
OK
1321
6058
16464
...
422917
Time taken: 53.104 seconds, Fetched: 65 row(s)

用户实时查询分析

查询不同品牌的购买次数

这次创建新的数据表进行存储:

create table scan(brand_id INT,scan INT) COMMENT 'This is the search of bigdatataobao' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;

导入数据:

insert overwrite table scan select brand_id,count(action) from user_log where action='2' group by brand_id;

查看结果:

select * from scan;

结果(篇幅原因,展示部分结果):

OK
NULL    8
60  3
69  1
82  11
99  3
104 1
125 1
127 1
133 1
...
8396    3
8410    1
8461    1
Time taken: 0.852 seconds, Fetched: 544 row(s)

淘宝双11大数据分析(Hive 分析篇-上)相关推荐

  1. 淘宝双11大数据分析(环境篇)

    文章目录 案例分析 前言 数据分析流程 环境准备 软件要求 硬件要求 环境搭建 案例分析 前言 通过本案例,你可以: 熟悉在 Linux 系统中安装 Hadoop 集群.安装 Mysql 数据库,安装 ...

  2. 淘宝双11大数据分析(数据准备篇)

    文章目录 前言 数据内容分析 `user_log.csv`文件内容含义 `train.csv` 和 `test.csv` 文件内容含义 数据上传到Linux系统并解压 数据集的预处理 文件信息截取 导 ...

  3. 大数据系统开发综合实践(淘宝双11大数据批处理分析系统、NBA 、淘宝购物大数据实时展示、Spark GraphX)

    cqupt || xmu--大数据系统开发综合实践 代码放在了GitHub上 链接 task01 大数据批处理系统 淘宝双11大数据批处理分析系统 task02 大数据查询分析计算系统 NBA 统计大 ...

  4. Spark大数据-基于Hive和Spark的淘宝双11数据分析与预测

    基于Hive和Spark的淘宝双11数据分析与预测 1.系统和环境要求(版本仅供参考): Linux: centos7 MySQL: 5.7.16 Hadoop: 2.7.1 Hive: 1.2.1 ...

  5. 大数据-11-案例演习-淘宝双11数据分析与预测

    主要摘自 http://dblab.xmu.edu.cn/post/8116/ 案例简介 Spark课程实验案例:淘宝双11数据分析与预测课程案例,由厦门大学数据库实验室团队开发,旨在满足全国高校大数 ...

  6. 淘宝双11数据分析与预测

    淘宝双11数据分析与预测 一. 案例简介 Spark课程实验案例:淘宝双11数据分析与预测课程案例,由厦门大学数据库实验室团队开发,旨在满足全国高校大数据教学对实验案例的迫切需求.本案例涉及数据预处理 ...

  7. 淘宝双11数据分析与预测汇总

    国庆假期留在学校做了一下林子雨博士的大数据实验--淘宝双11数据分析与预测,虽然教程写得很详细,但自己还是踩了很多坑,现在记录下来,希望给别人一点帮助. 淘宝双11数据分析与预测实验链接:http:/ ...

  8. 淘宝双11数据分析与预测--“坑点”汇总

    国庆假期留在学校做了一下林子雨博士的大数据实验--淘宝双11数据分析与预测,虽然教程写得很详细,但自己还是踩了很多坑,现在记录下来,希望给别人一点帮助. 淘宝双11数据分析与预测实验连接:点击这里 问 ...

  9. 淘宝双11数据分析与预测课程案例—步骤四:利用Spark预测回头客行为代码报错

    在练习林子雨老师的"淘宝双11数据分析与预测课程案例-步骤四:利用Spark预测回头客行为"章节时出现了代码报错. 具体在执行"val model = SVMWithSG ...

最新文章

  1. 有界阻塞队列ArrayBlockingQueue和无界阻塞队列LinkedBlockingQueue
  2. 如何在Node.js中退出
  3. haproxy定义规则限制IP访问
  4. 【Python】Pyecharts数据可视化模块练习
  5. 分布式与人工智能课程(part6)--第六课
  6. 哪位科学家奠定了计算机结构理论,计算机等级考试一级理论知识选择题题库(1-50)...
  7. JavaScript字符串方法——持续补充
  8. JavaScript之函数实例属性和类属性
  9. 简明Python docstrings
  10. 使用DxVcl为Python的飞信库写一个简单的GUI
  11. 蓝桥02 等差素数列 ——数论知识
  12. 在1分钟K线图中显示分时图均价线的公式
  13. 下载B站、秒拍等视频网站视频
  14. JAVA百度校招笔试题(含答案、解析)
  15. 有没有发现不会写简历,感觉什么都不会?其实写简历也是一种艺术。
  16. 云南大理旅游时间推荐
  17. jsp新代码第45课
  18. python中 pip不慎卸载了,重新安装方法
  19. 爆乱媒评——雄性传媒,大与小的技巧——凤凰卫视VS央视评点(1)
  20. 把数据导出到Excel表格中的方式

热门文章

  1. 数字化转型,企业需要何种网络架构?
  2. /lib64 系统库文件出问题,报 ln: error while loading shared libraries: libc.so.6: cannot open shared object
  3. 第一个cocos2d程序的代码分析
  4. Ffmpeg + OpenSL ES + Android 播放音频
  5. python做购物车代码大全-python 字典实现简单购物车
  6. BRCM5.02编译六:No package 'zlib' found
  7. 图数据库:从传统关系型数据库说起
  8. 【Unity Shader】Blend混合
  9. dell笔记本显卡报错43解决方法
  10. 中科大少年班,官方公布48名新生名单,有人因偶像曹原,有人只是不想经历高三...