hive自定义函数

UDF:用户自定义函数
针对单条记录
建立函数:
自定义一个java类,继承UDF类,重写evaluate方法,打jar包,hive执行add jarjava

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public  class udftest extends UDF{
    public boolean evaluate(Text t1,Text t2){
        if(t1==null||t2==null){
            return  false;
        }
        double d1 = Double.parseDouble(t1.toString());
        double d2 = Double.parseDouble(t2.toString());
        if(d1>d2)
            return true;
        else
            return false;
    }
}

若是传回t1的值大于t2,返回true,不然返回false
而后打jar包,web

hive>add jar /jar包路径
hive>create temporary function bigthan as '完整类路径';告诉hive建立一个bigthan函数,及对应的类路径

mytable

money
30
40
50
35
60

hive>select bigthan(money,40) from mytable;
false
false
true
false
true

UDAF:用户自定义聚合函数
user defined aggregation function
针对记录集合apache

实现resolver
resolver一般继承org.apache.hadoop.hive.ql.udf.GenericUDAFResolver2svg

Mode函数

PARTIAL1:mapreduce的map阶段,从原始数据到部分数据聚合,将会调用iterate()和terminatePartial()
PARTIAL2:这个是mapreduce的map端的combiner阶段,负责在map端合并map的数据,从部分数据聚合到部分数据聚合,将会调用merge和terminatepartial
FINAL:mapreduce的reduce阶段,从部分数据的聚合到彻底聚合,将会调用merge和terminate
COMPLETE:若是出现了这个阶段,表示maoreduce只要meap,没有reduceoop

永久函数
若是但愿在hive中自定义一个函数, 并且可以永久使用,则修改源码添加相应的函数类,而后在修改ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java类,添加相应的注册函数代码
registerUDF(“parse_url”,UDFParseUrl.class,false)lua

新建hiverc文件
jar包放到安装目录下或者指定目录下
$HOME/.hiverc
把初始化语句加载到文件中url