hive扩展函数开发规范

提供以下两种实现方式:a继承org.apache.hadoop.hive.ql.exec.UDF类

代码包为:packageorg.apache.hadoop.hive.ql.udf
实现evaluate方法,根据输入参数和返回参数类型,系统自动转换到匹配的方法实现上。
例如:
•    UDFTestLength.java:
importorg.apache.hadoop.io.IntWritable;
importorg.apache.hadoop.io.Text;
public classUDFTestLength extends UDF {
  IntWritable result = new IntWritable();
  public IntWritable evaluate(Text s) {
    if (s== null) {
      return null;
    }
    result.set(countUDF8Characters(s));
    return result;
  }
}

b继承org.apache.hadoop.hive.ql.udf.generic.GenericUDF类

代码包为:packageorg.apache.hadoop.hive.ql.udf. generic
实现initialize ,evaluate,    getDisplayString方法
例如:
 
@Description(name = "url_to_map", value = "_FUNC_(text,delimiter1, delimiter2) - "      
public class GenericUDFUrlToMap extends GenericUDF{
HashMap<Object,Object> ret = new HashMap<Object, Object>();
 
@Override
public ObjectInspector initialize(ObjectInspector[]arguments)
        throwsUDFArgumentException {
 
     … …
 
     returnObjectInspectorFactory.getStandardMapObjectInspector(
            PrimitiveObjectInspectorFactory.javaStringObjectInspector,
            PrimitiveObjectInspectorFactory.javaStringObjectInspector);
}
 
@Override
public Object evaluate(DeferredObject[]arguments) throws HiveException {
     ret.clear();
     … …
 
     return ret;
}
 
@Override
public String getDisplayString(String[]children) {
     StringBuildersb = new StringBuilder();
     sb.append("url_to_map(");
     assert (children.length <= 3);
     boolean firstChild = true;
     for (String child :children) {
        if (firstChild) {
            firstChild= false;
        }else {
            sb.append(",");
        }
        sb.append(child);
     }
     sb.append(")");
     return sb.toString();
}
}
 
 
扩展函数写完后需要统一注册到FunctionRegistry中,发布后成为系统函数;
扫一扫超人学院微信二维码

转载于:https://www.cnblogs.com/CRXY/p/4564077.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值