大数据开发之Hive(统计影音视频网站的常规指标)

这篇具有很好参考价值的文章主要介绍了大数据开发之Hive(统计影音视频网站的常规指标)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第 11 章:Hive实战

11.1 数据结构

1、视频表

字段 备注 详细描述
videoId 视频唯一id(String) 11位字符串
uploader 视频上传者(String) 上传视频的用户名String
age 视频年龄(int) 视频在平台上的整天数
category 视频类别(Array) 上传视频指定的视频分类
length 视频长度(Int) 整形数字标识的视频长度
views 观看次数(Int) 视频被浏览的次数
rate 视频评分(Double) 满分5分
Ratings 流量(Int) 视频的流量,整形数字
comments 评论数(Int) 一个视频的整数评论数
relatedId 相关视频id(Array) 相关视频的id,最多20个

2、用户表

字段 备注 字段类型
uploader 上传者用户名 string
videos 上传视频数 int
friends 朋友数量 int

11.2 准备工作

1、需要准备的表
1)创建原始数据表:gulivideo_ori,gulivideo_user_ori,
2)创建最终表:gulivideo_orc,gulivideo_user_orc
2、创建原始数据表
1)创建原始数据表gulivideo_ori

create external table gulivideo_ori(
    videoId string, 
    uploader string, 
    age int, 
    category array<string>, 
    length int, 
    views int, 
    rate float, 
    ratings int, 
    comments int,
    relatedId array<string>
)
row format delimited fields terminated by "\t"
collection items terminated by "&"
stored as textfile
location '/gulivideo/video';

2)创建原始数据表:gulivideo_user_ori

create external table gulivideo_user_ori(
    uploader string,
    videos int,
    friends int
)
row format delimited 
fields terminated by "\t" 
stored as textfile
location '/gulivideo/user';

3)创建orc存储格式带snappy压缩的表gulivideo_orc

create table gulivideo_orc(
    videoId string, 
    uploader string, 
    age int, 
    category array<string>, 
    length int, 
    views int, 
    rate float, 
    ratings int, 
    comments int,
    relatedId array<string>
)
stored as orc
tblproperties("orc.compress"="SNAPPY");

4)创建orc存储格式带snappy压缩的表gulivideo_user_orc

create table gulivideo_user_orc(
    uploader string,
    videos int,
    friends int
)
row format delimited 
fields terminated by "\t" 
stored as orc
tblproperties("orc.compress"="SNAPPY");

5)向ori表插入数据

load data local inpath "/opt/module/hive/datas/video" into table gulivideo_ori;
load data local inpath "/opt/module/hive/datas/user.txt" into table gulivideo_user_ori;

6)向orc表插入数据

insert into table gulivideo_orc select * from gulivideo_ori;
insert into table gulivideo_user_orc select * from gulivideo_user_ori;

11.3 业务分析

11.3.1 统计视频观看数Top10

1、思路:
使用order by按照views字段做一个全局排序即可,同时我们设置只显示前10条。
2、代码

select
    videoId,
    `views`
from gulivideo_orc
order by `views` desc 
limit 10;
OK
videoid          views
dMH0bHeiRNg     42513417
0XxI-hvPRRA     20282464
1dmVU08zVpA     16087899
RB-wUgnyGv0     15712924
QjA5faZF1A8     15256922
-_CSo1gOd48     13199833
49IDp76kjPw     11970018
tYnn51C3X_w     11823701
pv5zWaTEVkI     11672017
D2kJZOfq7zk     11184051

11.3.2 统计视频类别热度Top10(类别热度:类别下的总视频数)

1、思路:
1)统计每个类别有多少个视频,显示出包含视频最多的前10个类别。
2)我们需要按照类别group by聚合,然后count组内的videoId个数即可。
3)因为当前表结构为:一个视频对应一个或多个类别。所以如果要group by类别,需要先将类别进行行列转化(展开),然后再进行count即可。
4)最后按照热度排序,显示前10条。
2、代码

select
    tmp01.category_col,
    count(tmp01.videoId) num
from (
     select
         videoId,
         category_col
     from gulivideo_orc
              lateral view
                  explode(category) t as category_col
) tmp01
group by tmp01.category_col
order by num desc
limit 10;
// 结果显示
OK
tmp01.category_col        num
Music                      179049
Entertainment             127674
Comedy                     87818
Animation                 73293
Film                       73293
Sports                     67329
Gadgets                    59817
Games                      59817
Blogs                      48890
People                     48890

11.3.3 统计出视频观看数最高的20个视频的所属类别以及类别包含Top20视频的个数

1、思路
1)先找到观看书最高的20个视频所属条目的所有信息(主要是类目),降序排列
2)先把20条信息中的category分裂出来(列转行),形成新的字段category_name
3)在第二步的结果下,按照炸开的视频类别category_name分组,然后统计组内的个数category_count
2、最终代码

 select
    table02.categroy_name,
    count(table02.videoId) num
from (
     select
         videoId,
         categroy_name
     from (
              select
                  videoId,
                  `views`,
                  category
              from gulivideo_orc
              order by `views` desc
              limit 20
          ) table01
              lateral view
                  explode(category) tmp as categroy_name
) table02
group by table02.categroy_nam;
// 结果显示
OK
table02.categroy_name   num
 Blogs                     2
 UNA                        1
Comedy                     6
Entertainment             6
Music                      5
People                     2

11.3.4 统计视频观看数Top50所关联视频的所属类别排序

1、思路
1)先找到观看数前50的视频信息(主要是求出关联视频)
2)炸开第一步求出的关联视频array,形成一个新字段new_relatedid
3)用new_relatedid和gulivideo_orc表进行join,求出new_relatedid的类别
4)炸开第三步结果的category,形成新字段category_name
5)按照catedory_name分组,然后求出每个分组的个数category_count
6)对category_count进行排序,利用开窗函数
2、代码

select 
    t5.category_name,
    t5.num,
    rank() over(order by t5.num desc ) rk
from (
     select
         t4.category_name,
         count(t4.realte_id) num
     from (
              select
                  t3.realte_id,
                  category_name
              from (
                       select
                           t2.realte_id,
                           g.category
                       from (
                                select
                                    realte_id
                                from (
                                         select
                                             videoId,
                                             relatedId,
                                             `views`
                                         from gulivideo_orc
                                         order by `views` desc
                                         limit 50
                                     ) t1
                                         lateral view
                                             explode(t1.relatedId) tmp as realte_id
                            ) t2 join gulivideo_orc g on t2.realte_id = g.videoId
                   ) t3
                       lateral view
                           explode(t3.category) tmp as category_name
          ) t4
     group by t4.category_name        
) t5 ;
// 结果显示OK
t5.category_name        t5.num  rk
Comedy  237     1
Entertainment   216     2
Music   195     3
People  51      4
Blogs   51      4
Animation       47      6
Film    47      6
News    24      8
Politics        24      8
Games   22      10
Gadgets 22      10
Sports  19      12
Howto   14      13
DIY     14      13
UNA     13      15
Travel  12      16
Places  12      16
Animals 11      18
Pets    11      18
Autos   4       20
Vehicles        4       20

11.3.5统计每个类别中的视频热度Top10,以Music为例

1、思路
1)要想统计Music类别中的视频热度Top10,需要先找到Music类别,那么就需要将category展开成新的字段categary_name。
2)然后通过category_name过滤“Music”分类的所有视频信息,按照视频观看数倒序排序,取前10
3)统计对应类别(Music)中的视频热度
2、代码

select
    videoId,
    `views` hot
from (
     select
         videoId,
         category_name,
         `views`
     from gulivideo_orc
              lateral view
                  explode(category) tmp as category_name        
) t1
where category_name = "Music"
order by hot desc 
limit 10;
// 结果显示
OK
videoid          hot
QjA5faZF1A8     15256922
tYnn51C3X_w     11823701
pv5zWaTEVkI     11672017
8bbTtPL1jRs     9579911
UMf40daefsI     7533070
-xEzGIuY7kw     6946033
d6C0bNDqf3Y     6935578
HSoVKUVOnfQ     6193057
3URfWTEPmtE     5581171
thtmaZnxk_0     5142238

11.3.6 统计每个类别视频观看数Top10

1、思路
1)把每个原始表的类别炸开,形成新的字段category_name
2)按照炸裂开的类别字段category_name分区,按照视频观看数views倒叙排序进行开窗,求出每个类别下的所有视频的观看次数排序rk
3)按照rk字段对全表进行where过滤,求出每个类别观看书Top10
2、代码

select
    t2.category_name,
    t2.views,
    t2.rk
from (
     select
         t1.category_name,
         t1.views,
         rank() over(partition by t1.category_name order by t1.views desc ) rk
     from (   
           select
               category_name,
               `views`
           from gulivideo_orc
                    lateral view
                        explode(category) tmp as category_name
       ) t1
) t2
where rk <= 10// 结果显示
OK
t2.category_name        t2.views        t2.rk
Comedy  42513417        1
Comedy  20282464        2
Comedy  11970018        3
Comedy  10107491        4
Comedy  9566609 5
Comedy  7066676 6
Comedy  6322117 7
Comedy  5826923 8
Comedy  5587299 9
Comedy  5508079 10
News    4706030 1
News    2899397 2
News    2817078 3
News    2803520 4
News    2348709 5
News    2335060 6
News    2326680 7
News    2318782 8
News    2310583 9
News    2291369 10
……
Time taken: 11.376 seconds, Fetched: 210 row(s)

11.3.7 统计上传视频最多的用户Top10以及它们上传的视频观看次数在前20的视频

有三种理解
理解一:取Top10中所有人上传的视频的观看次数前20
1、思路
1)去用户表gulivideo_user_orc求出上传视频最多的十个用户
2)关联gulivideo_orc表,求出这10个用户上传的所有的视频,按照观看数取前20
2、代码

SELECT
    t1.uploader,
    t2.videoid,
    t2.views
FROM
    (
        select
            uploader,
            videos
        from gulivideo_user_orc
        order by videos DESC
        limit 10
    ) t1
        JOIN
    gulivideo_orc t2
    on t1.uploader = t2.uploader
ORDER BY t2.views DESC
LIMIT 20;
// 结果显示
OK
t1.uploader     t2.videoid      t2.views
expertvillage   -IxHBW0YpZw     39059
expertvillage   BU-fT5XI_8I     29975
expertvillage   ADOcaBYbMl0     26270
expertvillage   yAqsULIDJFE     25511
expertvillage   vcm-t0TJXNg     25366
expertvillage   0KYGFawp14c     24659
expertvillage   j4DpuPvMLF4     22593
expertvillage   Msu4lZb2oeQ     18822
expertvillage   ZHZVj44rpjE     16304
expertvillage   foATQY3wovI     13576
expertvillage   -UnQ8rcBOQs     13450
expertvillage   crtNd46CDks     11639
expertvillage   D1leA0JKHhE     11553
expertvillage   NJu2oG1Wm98     11452
expertvillage   CapbXdyv4j4     10915
expertvillage   epr5erraEp4     10817
expertvillage   IyQoDgaLM7U     10597
expertvillage   tbZibBnusLQ     10402
expertvillage   _GnCHodc7mk     9422
expertvillage   hvEYlSlRitU     7123
Time taken: 57.272 seconds, Fetched: 20 row(s)

理解二:取Top10中每个人上传的视频的观看次数前20
1、思路
1)去用户表gulivideo_user_orc求出上传视频最多的10个用户
2)关联gulivideo_orc表,求出这10个用户上传的所有视频id,视频观看次数,还要按照uploader分区,views倒叙排序,求出每个uploder的上传的视频的观看排名
3)按照rk进行where过滤,求出rk<=20的数据
2、代码

select
    t3.uploader,
    t3.videoId,
    t3.views,
    t3.rk
from (
     select
         t2.uploader,
         t2.videoId,
         t2.views,
         rank() over(partition by uploader order by t2.views desc ) rk
     from (
              select
                  t1.uploader,
                  g.videoId,
                  g.`views`
              from (
                       select
                           uploader
                       from gulivideo_user_orc
                       order by videos desc
                       limit 10
                   ) t1 join gulivideo_orc g on t1.uploader = g.uploader
          ) t2    
) t3
where rk <=20;
// 结果显示
OK
t3.uploader     t3.videoid      t3.views        t3.rk
expertvillage   -IxHBW0YpZw     39059   1
expertvillage   BU-fT5XI_8I     29975   2
expertvillage   ADOcaBYbMl0     26270   3
expertvillage   yAqsULIDJFE     25511   4
expertvillage   vcm-t0TJXNg     25366   5
expertvillage   0KYGFawp14c     24659   6
expertvillage   j4DpuPvMLF4     22593   7
expertvillage   Msu4lZb2oeQ     18822   8
expertvillage   ZHZVj44rpjE     16304   9
expertvillage   foATQY3wovI     13576   10
expertvillage   -UnQ8rcBOQs     13450   11
expertvillage   crtNd46CDks     11639   12
expertvillage   D1leA0JKHhE     11553   13
expertvillage   NJu2oG1Wm98     11452   14
expertvillage   CapbXdyv4j4     10915   15
expertvillage   epr5erraEp4     10817   16
expertvillage   IyQoDgaLM7U     10597   17
expertvillage   tbZibBnusLQ     10402   18
expertvillage   _GnCHodc7mk     9422    19
expertvillage   hvEYlSlRitU     7123    20
Ruchaneewan     5_T5Inddsuo     3132    1
Ruchaneewan     wje4lUtbYNU     1086    2
Ruchaneewan     i8rLbOUhAlM     549     3
Ruchaneewan     OwnEtde9_Co     453     4
Ruchaneewan     5Zf0lbAdJP0     441     5
Ruchaneewan     wenI5MrYT20     426     6
Ruchaneewan     Iq4e3SopjxQ     420     7
Ruchaneewan     3hzOiFP-5so     420     7
Ruchaneewan     JgyOlXjjuw0     418     9
Ruchaneewan     fGBVShTsuyo     395     10
Ruchaneewan     O3aoL70DlVc     389     11
Ruchaneewan     q4y2ZS5OQ88     344     12
Ruchaneewan     lyUJB2eMVVg     271     13
Ruchaneewan     _RF_3VhaQpw     242     14
Ruchaneewan     DDl2cjI-aJs     231     15
Ruchaneewan     xbYyjUdhtJw     227     16
Ruchaneewan     4dkKeIUkN7E     226     17
Ruchaneewan     qCfuQA6N4K0     213     18
Ruchaneewan     TmYbGQaRcNM     209     19
Ruchaneewan     dOlfPsFSjw0     206     20
Time taken: 30.772 seconds, Fetched: 40 row(s

理解三:Top10用户上传的所有视频,有哪些视频是在视频观看次数前20的视频
1、思路
1)去用户表gulivideo_user_orc求出上传视频最多的10个用户
2)关联gulivideo_orc表,求出这10个用户上传的所有的视频id,视频观看次数
3)在第二步的结果上,与视频表观看次数前20的数据进行内连接,求出Top10用户上传的视频有哪些是观看次数前20的视频
2、代码文章来源地址https://www.toymoban.com/news/detail-804833.html

SELECT
    t3.uploader,
    t3.videoid,
    t3.views
FROM
    (
        SELECT
            t1.uploader,
            t2.videoid,
            t2.views
        FROM
            (
                select
                    uploader,
                    videos
                from gulivideo_user_orc
                order by videos DESC
                limit 10
            ) t1
                JOIN
            gulivideo_orc t2
            on t1.uploader = t2.uploader
    ) t3
        JOIN
    (
        select
            videoid,
            `views`
        from gulivideo_orc
        order by `views` desc
        limit 20
    ) t4
on t3.videoid = t4.videoid;

到了这里,关于大数据开发之Hive(统计影音视频网站的常规指标)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据-玩转数据-Flink 网站UV统计

    在实际应用中,我们往往会关注,到底有多少不同的用户访问了网站,所以另外一个统计流量的重要指标是网站的独立访客数(Unique Visitor,UV)。 对于UserBehavior数据源来说,我们直接可以根据userId来区分不同的用户。 将userid放到SET集合里面,统计集合长度,便可以统计到网

    2024年02月11日
    浏览(37)
  • 一键部署 Umami 统计个人网站访问数据

    谈到网站统计,大家第一时间想到的肯定是 Google Analytics。然而,我们都知道 Google Analytics 会收集所有用户的信息,对数据没有任何控制和隐私保护。 Google Analytics 收集的指标实在是太多了,有很多都是不必要的,没有博士学位可能都不太容易理解这些指标。 相比较而言,开

    2024年02月13日
    浏览(35)
  • 【群晖】NASTOOL-自动化处理影音视频工具

    本文主要从获取、部署、使用、配置等方面进行手把手教学如何使用 nastool 工具进行影音视频自动化处理。从此靠别繁琐的 网上各个网址找资源 - 下载 - 复制 - 改名 - 刮削 等操作。 DSM 7.1 (我使用的是群晖 7.1 系统,不管是白群还是黑群都是可以的) 网络通畅 打开套件中心

    2024年04月11日
    浏览(28)
  • 交易流水指标统计——pandas

    1、根据交易流水,计算每个交易交易对象的如下指标, 总收入笔数、总收入月数、最大月收入笔数、最大月收入笔数所在日期(年月日格式) id _COL0 x _COL4 _col5 交易对方 0 1000050001202305060010n153222358 2023-05-06 18:10:45 转账 收入 676.0 三巷7号303 1 1000050001202305060717n985751052 2023-05-0

    2024年02月15日
    浏览(24)
  • 利用Prometheus做指标统计

    背景:目前公司需要统计一些数据, 而这些数据有些量非常大(千万量级的数据)。 如果在mysql中做统计, 可能会引发慢查询或者造成mysql集群负载过高的问题。 目前业务没有将这些数据同步到ES等数据库, 如果为了统计而调整业务, 这个改造成本比较高。 目前这些指标,

    2024年02月12日
    浏览(30)
  • 《尚贤达猎头网站流量统计模块》,通过HTTP自定义模块实时获取asp.net网站访问流量,并保存到数据库

    开发了个网站流量统计模块,实时获取asp.net网站访问流量,并保存到数据库。 一、功能: 通过HTTP自定义模块实时获取网站流量 二、支持平台:windows+IIS 三、安装方法: 1、将文件www.sunsharer.cn.dll复制到网站bin目录下; 2、将配置好的sqlstr.txt复制到网站bin目录下; 3、将数据

    2024年01月16日
    浏览(34)
  • 2023-06-13:统计高并发网站每个网页每天的 UV 数据,结合Redis你会如何实现?

    2023-06-13:统计高并发网站每个网页每天的 UV 数据,结合Redis你会如何实现? 答案2023-06-13: 如果统计 PV (页面浏览量)那非常好办,可以考虑为每个网页创建一个独立的 Redis 计数器,并将日期添加为键(key)的后缀。当网页收到请求时,对应的计数器将被递增。对于每天的

    2024年02月08日
    浏览(70)
  • 基于java旅游网站管理系统(springboot框架)开题答辩常规问题

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、

    2024年01月21日
    浏览(43)
  • 粤嵌 GEC-6818 蓝牙智能家庭影音 arm开发记录

    注意:未经允许不得转载,引用请注明出处 文件操作:创建、删除、复制、移动 环境:VMware15.5,ubantu16.04,串口驱动HI-340,secureCRT 设置共享文件夹,设置后ubantu系统和windows系统可以共享使用该文件夹里面的内容。 1.gcc编译:将c文件进行编译 2.交叉编译:将c文件编译成arm文

    2024年01月22日
    浏览(46)
  • 常用【描述性统计指标】含义(by python)

    统计学有时候会被误解,好像必须有大量的样本数据,才能使统计结果有意义。 这会让我们觉得统计学离我们的日常生活很遥远。 其实,如果数据的准确度高的话,少量的样本数据同样能反映出真实的情况。 比如,很多国家选举时不断做的民意调查,一般做到有效样本160

    2024年02月05日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包