欢迎投稿

今日深度:

hive自定义函数,

hive自定义函数,


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

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包,

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
针对记录集合

实现resolver
resolver通常继承org.apache.hadoop.hive.ql.udf.GenericUDAFResolver2

Mode

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

永久函数
如果希望在hive中自定义一个函数, 而且能够永久使用,则修改源码添加相应的函数类,然后在修改ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java类,添加相应的注册函数代码
registerUDF(“parse_url”,UDFParseUrl.class,false)

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

www.htsjk.Com true http://www.htsjk.com/hive/38522.html NewsArticle hive自定义函数, UDF:用户自定义函数 针对单条记录 创建函数: 自定义一个java类,继承UDF类,重写evaluate方法,打jar包,hive执行add jar import org.apache.hadoop.hive.ql.exec.UDF; import org.apache....
相关文章
    暂无相关文章
评论暂时关闭