Hive自定义函数(UDF)

UDF:User-Defined Function自定义函数

看下官方文档:

官方文档上说:UDF是一个自定义函数,和hive一起使用,一个新的UDF类需要继承UDF这个父类

org.apache.hadoop.hive.ql.udf.generic.GenericUDF

GenericUDF提供了更多的灵活性和更复杂的成本。

扩展该UDF类的要求是:实现一个或多个evaluate方法,该方法有hive调用,通过设置一个制定的UDFMethodResolver,可以配置解析要调用的方法的具体方法,

上面是UDF的一些类库,同时上面还说了,evaluate永远不应是是一个void 方法,当它有需要的可以返回一个null,返回的类型和方法参数可以是java类型的或者是hadoop类型的数据

该类的一个实例将在每个JVM中实例化,并且不会并发调用。

下面来看一个分割字符串的小案例:

public class CountToolUDF extends UDF {
    public IntWritable evaluate(Text votetools){
        String value = votetools.toString();
        if (StringUtils.isBlank(value)) {
            return new IntWritable(0);
        }
            int length = value.split(";").length;
            return new IntWritable(length);
    }
    public static void main(String[] args) {
        Text text = new Text("PyCharm;RapidMiner;Weka;Java;Python;SQL language;Open Source Hadoop Tools;SQL on Hadoop tools");
        System.out.println(new CountToolUDF().evaluate(text));
    }

}

由案例可以看出我自定义了UDF函数继承了UDF这个父类,并实现了它的方法都是 evaluate();同时呢我设置了返回值为hadoop的数据类型,这是有原因的:因为UDF要和hive一起使用,而hive是作用在hadoop上的,而且它执行的程序是MapReduce程序,省去了一个转化功能,减少了时间,节约了资源。如果用java的数据类型最后还需要转化成hadoop数据类型,这样不利于资源的节省。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

double_lifly

点喜欢就是最好的打赏!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值