Hive计算玩家连胜&连败
来源:互联网 发布:17年机械行业数据采集 编辑:程序博客网 时间:2024/06/11 01:42
前几天接到以需求,要求计算玩家的连胜&连败纪录,数据sample如下:
源数据的表结构如下:
CREATE TABLE `t1`( `id` bigint, `player_id` int, `game_result` int, `season` int, `game_type` int)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
数据文件如下:
id:表示比赛id
player_id:用户id
game_result:比赛结果,0代表输,1代表赢
idplayer_idgame_result112312123133210使用python编写UDF如下:
python文件名:
win_streak_reduce.py
#! /usr/bin/pythonimport sysfor line in sys.stdin: line = line.split('\t') player_id = line[0] games = [int(i) for i in line[1].split(',')] win_streak_max = 0 lost_streak_max = 0 win_tmp = 0 lost_tmp = 0 for i in games: if i == 1: lost_tmp = 0 win_tmp += 1 else: lost_tmp += 1 win_tmp = 0 if win_tmp > win_streak_max: win_streak_max = win_tmp if lost_tmp > lost_streak_max: lost_streak_max = lost_tmp print "{player_id}\t{win_streak_max}\t{lost_streak_max}".format(player_id = player_id, win_streak_max = win_streak_max, lost_streak_max = lost_streak_max)
最后查询:
add file /win_streak_reduce.py;select transform(player_id,games) using 'python win_streak_reduce.py' as player_id,win_streak,lost_streak from (select player_id,concat_ws(',',collect_list(cast(game_result as string))) games from (select player_id,id, game_result from t1 cluster by player_id,id) t group by player_id) t;
整体思路是:
1. 将比赛记录按照player_id,id排序,HQL中的cluster by player_id,id,会使同一个player_id的数据被分发到一起处理。
2. concat_ws(',',collect_list(cast(game_result as string)))会把玩家的比赛结果按照id从小打到排成数组,最后转成字符串,用,分隔
3. 使用udf对比赛结果进行计算,找出连胜和连败最大值。
使用hive不久,这样的处理方式虽然能解决问题,但相信这样的处理方式显得很不专业。请各位大牛批评指正。
1 0
- Hive计算玩家连胜&连败
- NBA历史上最长的连胜和连败纪录!
- 火箭连败
- 玩家
- milan二连败
- 火箭连败三场
- 汪峰抢头条5连败坏
- hive计算分位数
- Hive计算引擎切换
- hive--计算方差标准差
- Hive计算日期差
- hive 时间格式,计算
- Hive计算引擎切换
- AV-Test发布最新企业级端点安全评测:云计算安全技术架构助趋势科技OfficeScan获七连胜
- 外挂辅助技术-计算怪物与玩家的距离
- 荷兰迎来十连胜
- Pinterest炒作连胜?
- Hive 累积和的计算
- 2012年5月SAT香港真题解析
- 新接触的 ECharts 图表框架饼状图
- synchronized,当作用于方法与对象的不同之处
- 错误 loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicat
- linux 备忘命令
- Hive计算玩家连胜&连败
- Cocos2d-x各版本项目的配置与创建汇总贴
- svn服务器权限问题
- 监控摄像头,车载摄像头选型
- 类模板和专属类模板
- 《算法导论》— Chapter 11 散列表
- 人为移动rigidbody的位置
- 算法竞赛入门经典例题-蚂蚁
- 比较器报错:Comparison method violates its general contract