推广 热搜: 公司  快速  中国  上海    未来  企业  政策  教师  系统 

Hadoop入门学习(4)——如何统计直播平台的数据

   日期:2024-11-19     作者:caijiyuan    caijiyuan   评论:0    移动:http://fabua.ksxb.net/mobile/news/846.html
核心提示:idea,hadoop,fastjson1.分析前端数据,找出该平台开播时间最长的十名主播 2.统计该主播们的信息,包

idea,hadoop,fastjson

Hadoop入门学习(4)——如何统计直播平台的数据

1.分析前端数据,找出该平台开播时间最长的十名主播

2.统计该主播们的信息,包括

  • 主播ID(uid
  • 金币数量(gold
  • 总观看pv(watchnumpv
  • 粉丝关注数量(follower
  • 总开播时长(length)

从前端获得的日志文件为Json格式,如图Hadoop入门学习(4)——如何统计直播平台的数据

1.所以可以采用fastjson进行处理,获取需要的几个核心字段,并且进行异常数值判断

2.由于不需要聚合,只是一个简单的过滤操作,所以只需要map阶段,不需要reduce

3.在maven项目的“src–main–java”目录下new一个package,名为DataClean,在包里新建两个class:

  • DataCleanJob
  • DataCleanMap

4.DataCleanMap:

 

5.DataCleanJob:

 
 

1.new一个名为VideoInfo的package

2.为了方便统计主播的指标数据,最好是把这些字段整合到一个对象中,这样维护起来比较方便,这样就需要自定义一个writable了——VideoInfoWritable,并且对几个方法进行重写;

而setGold和getGold等方法可以通过idea自动生成"Generate–setter"或"Generate–getter"即可

VideoInfoWritable:

 

3.编写map函数对清洗过的数据进行切割,并且整合进k2,v2,其中k2是主播的id,类型为Text,v2类型为VideoInfoWritable

VideoInfoMap:

 

4.编写reduce方法进行聚合:

VideoInfoReduce:

 

5.将map和reduce进行组装为job

VideoInfoJob:

 
 

VideoInfoTop10Map.java:

 

在reduce的过程中,我们需要统计当日各个主播的直播总时长,并且按照总时长的顺序为主播排序。

虽然Hadoop在map和reduce之间会进行一次排序,但是这次排序是按照key值的字典序来排列的,在reduce的输入端,key值是主播id,这样的排序不满足我们的需求,因此,我们用一个HashMap来保存键值对,在其中进行排序,为此我们要实现一个MapUtils类用来处理Map中的数据。

为了方便日志文件的管理,我们可以约定在输入路径的最后以日期结尾,并且将日期和主播id都写进k3之中,为此,需要一个处理日期的类DateUtils。

DateUtils.java:

 

MapUtils.java:

 

VideoInfoTop10Reduce.java:

 

最后,将map和reduce组装在一起

VideoInfoJobTop10:

本文地址:http://fabua.ksxb.net/news/846.html    海之东岸资讯 http://fabua.ksxb.net/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类最新资讯
0相关评论

文章列表
相关文章
最新动态
推荐图文
最新资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备2023022329号