2013-03-27
周海汉/文 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
如非注明转载, 均为原创. 本站遵循知识共享CC协议,转载请注明来源
FEATURED TAGS
css
vc6
http
automake
linux
make
makefile
voip
乱码
awk
flash
vista
vi
vim
javascript
pietty
putty
ssh
posix
subversion
svn
windows
删除
编译
多线程
wxwidgets
ie
ubuntu
开源
c
python
bash
备份
性能
scp
汉字
log
ruby
中文
bug
msn
nginx
php
shell
wordpress
mqueue
android
eclipse
java
mac
ios
html5
js
mysql
protobuf
apache
hadoop
install
iocp
twisted
centos
mapreduce
hbase
thrift
tutorial
hive
erlang
lucene
hdfs
sqoop
utf8
filter
草原
yarn
ganglia
恢复
scrapy
django
fsimage
flume
tail
flume-ng
mining
scala
go
kafka
gradle
cassandra
baas
spring
postgres
maven
mybatis
mongodb
https
nodejs
镜像
心理学
机器学习
Keras
theano
anaconda
docker
spark
akka-http
json
群论
区块链
加密
抽象代数
离散对数
同余
欧拉函数
扩展欧几里德算法
ES6
node-inspect
debug
win10
vscode
挖矿