当前位置:  开发笔记 > 大数据 > 正文

hive mapreduce script用法示例

周海汉文2013.3.27对于一些hql语句特殊处理,hive本身没有提供相应功能,可以有两种方式,一是mapreducescript,二是写UDF,UDAF,UDTF等。后者需要调用hive提供的api。前者则类似mapreduce的stream模式,只需正确处理输入输出即可。所以mapreduce脚本

周海汉/文 2013.3.27 对于一些hql语句特殊处理,hive本身没有提供相应功能,可以有两种方式,一是mapreduce script,二是写UDF,UDAF,UDTF等。后者需要调用hive提供的api。前者则类似mapreduce的stream模式,只需正确处理输入输出即可。 所以mapreduce脚本

周海汉/文
2013.3.27

对于一些hql语句特殊处理,hive本身没有提供相应功能,可以有两种方式,一是mapreduce script,二是写UDF,UDAF,UDTF等。后者需要调用hive提供的api。前者则类似mapreduce的stream模式,只需正确处理输入输出即可。
所以mapreduce脚本进行一些简单处理还是很方便的。

本例想计算德州扑克玩家是否赢牌,算法是:如果弃牌或所赢筹码为NULL,则输。如果有赢边池或底池的筹码,也不一定赢。要用底池+边池筹码-所投注数,如果大于0,则一定赢了。
现在底池边池筹码是不固定的,格式如下:
0:筹码|1:筹码|2:筹码|…
0表示底池,1,2等index表示不同的边池,最多8个边池。
用python来分析

cat calcwin.py

#!/usr/bin/env python
# coding:utf8
# author zhouhh
# date :2013-03-27
import sys
import datetime
def calcwin():
    for line in sys.stdin:
        (ldate,userid,roundbet,fold,allin,chipwon)=line.strip().split()
        win = '0'
        if fold=='1':
            print '\t'.join(["%s:%s"%(ldate,userid),win,fold,allin])
            continue
        cw = []
        if chipwon == "NULL":
            print '\t'.join(["%s:%s"%(ldate,userid),win,fold,allin])
            continue
        #print "userid win ",userid
        cw=chipwon.split('|')
        chipwonv=0
        roundbetv=int(roundbet)
        for v in cw:
            chipwonv += int(v.split(':')[1])
        if chipwonv > roundbetv:
            win = '1'
        print '\t'.join(["%s:%s"%(ldate,userid),win,fold,allin])
calcwin()

原始数据格式:

hive> !hadoop fs -cat /flume/test/testpoker;
03/13/13 14:59:51 00000ab4 1009 185690475 8639 240 1 0 -1 NULL NULL
03/13/13 14:59:51 00000cb4 1009 187270278 92030 600 1 0 -1 NULL NULL
03/13/13 14:59:52 000003d8 1009 184151687 8639 600 1 0 -1 NULL NULL
03/13/13 14:59:52 00000ba8 1009 186012530 8593 154135 0 1 7 8|21|16|42|39 0:73250|1:60500|2:100135
03/13/13 14:59:52 00000a88 1009 180286243 92041 100 1 0 -1 NULL NULL
03/13/13 14:59:52 00000ad8 1009 163003653 2829 40 1 0 -1 NULL NULL
03/13/13 14:59:54 000002ac 1009 183824880 8639 1200 0 0 -1 NULL 0:1900
03/13/13 14:59:55 0000091c 1009 173274868 92030 600 0 0 -1 NULL 0:1150

然后,在hive命名行添加calcwin.py

hive> add file calcwin.py
hive> from testpoker select transform(ldate,userid,roundbet,fold,allin,chipwon) using 'calcpoker.py' as (key,win,fold,allin) ;
...
OK
03/13/13:185690475      0       1       0
03/13/13:187270278      0       1       0
03/13/13:184151687      0       1       0
03/13/13:186012530      1       0       1

相关博文:

  1. hive 入门教程
  2. yarn hadoop mapreduce 2.0 编译
  3. hive 执行hbase创建表时找不到protobuf

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有