hive中的自定义函数 udf 和udaf和udtf的区别 以及用法

hive中的自定义函数 udf 和udaf和udtf的区别 以及用法

udf:
特点:input:output=1:1
实例函数:md5,split,ltrim
应用场景:1:1的情况,比如md5…
实现方法:简单udf实现
extends UDF
方法名 evaluate

举例:
public class Lower extends UDF {
public Text evaluate(Text s) {
if (s == null) {
return null;
}
return new Text(s.toString().toLowerCase());

}

1.将项目打包 打包后 放到linux系统hive的默认目录【不需要上传到hdfs】【默认目录:/opt/molute/jars/ (没有的话自己创建目录)
2.将jar包 添加到hive的classpath 【进入hive命令】【此步骤也相当于在hive上注册jar包】
hive> add jar /opt/molute/jars/udf.jar;
若执行成功 显示如下:
hive> add jar /opt/module/jars/udf.jar;
Added [/opt/module/jars/udf.jar] to class path
Added resources: [/opt/module/jars/udf.jar]
3.创建临时函数与开发好的 java class 关联
create temporary function toLowerCase as ‘cn.hive.Lower’; [【’’ 里是java类的路径 toLoweCase 是起的函数名 temporary是临时的】
4.测试 :show functions; 看我们刚才创建的hive 的自定义函数 toLowerCase 有没有
有的话 ,我们使用toLoweCase() 函数查询我们的一张表peopeo数据试试 如:
select toLoweCase(name) from peopeo; 结果成功 。ok 结束。

自我小总:就是hive内部机制会自动调用evaluate方法【只要注重 参数 和返回值即可 hive中自定义的方法名 随便起 默认执行evaluate方法中的业务逻辑并返回结果 evaluate方法返回的结果就是我们自定义函数想要的结果 所以 evaluate方法不能用void修饰】

udaf:
特点: input:output=n:1
示例函数:sum,count,max,min…
实现方法:extends UDAF,内部静态类实现接口UDAFEvaluator
五大方法:
init:初始化map或是reduce需用到的变量
iterate:迭代处理每条数据。true
terminatePartial:相当于mr的combiner
merge:其输入一定是terminatePartial的输出
terminate:处理的是merge的结果
具体介绍:
init():类似于构造函数,用于UDAF的初始化
iterate():接收传入的参数,并进行内部的轮转。其返回类型为boolean
terminatePartial():无参数,其为iterate函数轮转结束后,返回乱转数据,iterate和 terminatePartial类似于hadoop的Combiner(iterate–mapper;terminatePartial–reducer)
merge():接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean
terminate():返回最终的聚集函数结果

udtf:
特点:input:output=1:n
示例函数:explode
实现方法:udf+explode


版权声明:本文为zengxianglei原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。