Hive 实操案例五:统计每个类别中 Top10 的视频热度

一、数据表结构

视频表 t_video

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

二、具体实现

-- 统计每个类别中的视频热度 Top10
/**
  思路:
    1.先使用 explode 函数将 category 字段扁平化
    2.按照 videoid 和 扁平化后的类别字段分组聚合统计观看次数
    3.使用排序窗口函数按类别分组、观看次数降序排序进行组内编号
    4.使用 where 子句筛选每个类别组内的 top10 数据
*/
SELECT 
	cg,
	videoid,
	`views`,
	rn
FROM 
(
	SELECT 
		cg,
		videoid,
		`views`,
		DENSE_RANK() over(PARTITION by cg ORDER by `views` desc) as rn 
	FROM 
	(
		SELECT 
			videoid,
			cg,
			SUM(`views`) as `views`
		FROM t_video gv lateral view explode(category) adtable as cg 
		group by cg, videoid 
	) t1
) t2
WHERE rn <= 10;
  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值