hive udaf_hive 复杂 UDAF 使用方法

周海汉 /文 2013.3.27 前文《hive mapreduce script用法示例》 示例了mapreduce脚本。本文采用较复杂的方式自定义hive聚合函数。 package com.abloz.hive;/** * @author zhouhh * @date 2013-3-27 * note: for count value =1 */import org.apache.hadoop.hi

周海汉 /文

2013.3.27

前文《hive mapreduce script用法示例》

示例了mapreduce脚本。本文采用较复杂的方式自定义hive聚合函数。

package com.abloz.hive;

/**

* @author zhouhh

* @date 2013-3-27

* note: for count value >=1

*/

import org.apache.hadoop.hive.ql.exec.UDAF;

import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

import org.apache.log4j.Logger;

public class JJPokerStat extends UDAF {

public static class JJCountUDAFEvaluator implements UDAFEvaluator {

public static final Logger log = Logger.getLogger(JJPokerStat.class);

public static class PartialResult {

int total=0;

int win=0;

int fold=0;

int allin=0;

}

private PartialResult result;

public void init() {

result = new PartialResult();

}

public boolean calwin(int rbet,String chipwon)

{

if(chipwon.equalsIgnoreCase("NULL"))

{

return false;

}

String[] cw = chipwon.split("\\|");

int chipwons=0;

//log.info("calwin:"+chipwon);

for(String v:cw)

{

String[] c = v.split(":");

//log.info("calwin:v "+v+",c.length:"+c.length);

if(c.length>1)

{

chipwons += Integer.parseInt(c[1]);

}

}

//log.info("calwin:chipwons:"+chipwons+",rbet:"+rbet);

if(chipwons>rbet)

{

return true;

}

return false;

}

public boolean iterate(IntWritable rbet,Text chipwon,IntWritable f,IntWritable a) {

if ( rbet == null || chipwon == null || f == null || a == null) {

return true;

}

boolean win = calwin(rbet.get(),chipwon.toString());

if(result == null)

{

result = new PartialResult();

}

result.total++;

if(win)

{

result.win++;

}

int v = f.get();

if (v>=1)

{

result.fold++;

}

v = a.get();

if (v>=1)

{

result.allin++;

}

return true;

}

public PartialResult terminatePartial() {

return result;

}

public boolean merge(PartialResult other) {

if(other == null)

{

return true;

}

result.total+=other.total;

result.win += other.win;

result.fold += other.fold;

result.allin += other.allin;

return true;

}

public Text terminate() {

if(result == null) {

return new Text("0\t0\t0\t0");

}

String s=""+result.total+"\t"+result.win+"\t"+result.fold+"\t"+result.allin;

return new Text(s);

}

}

}

相关博文:hive mapreduce script用法示例

手工移除.META.表的错误信息

编程方式将hbase数据复制到mysql

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值