求平均数 udaf函数
package com.hive.myhive.udaf; import org.apache.hadoop.hive.ql.exec.UDAF; import org.apache.hadoop.hive.ql.exec.UDAFEvaluator; public class Avg extends UDAF{ public static class AvgStruct { public double num=0; public int count=0; } public static class AvgHandle implements UDAFEvaluator { private AvgStruct avgStruct=new AvgStruct(); @Override public void init() { // super(); } public boolean iterate(double s) { if(s!=0) { avgStruct.num+=s; avgStruct.count++; } return true; } public AvgStruct terminatePartial() { return avgStruct.count==0?null:avgStruct; } public boolean merge(AvgStruct o) { if(o!=null) { avgStruct.num+=o.num; avgStruct.count+=o.count; } return true; } public double terminate() { return avgStruct.count==0?null:(double)(avgStruct.num/avgStruct.count); } } }
打包和加入hive 和 hdf一样