在hive中,自定义的函数可以根据功能的划分为3中:
第一种是:1进一出,我们称之为UDF函数,类似的功能有大写转小写;在name字段前加上一个前缀等功能,这种函数的功能是将传入的1个字段进行转换成另外一个字段
第二种是:1进多出,我们称之为UDTF函数,类似的函数功能是explode函数,输入一行数据,可以出来多组的数据
第三种是:多进一出,我们称之为UDAF函数,类似的函数有sum,avg等聚合函数,输入多行数据,只出来一个结果
下面我们来看一下,如何自定义这些函数
1、UDF函数
1、导包,继承org.aparche.hadoop.hive.ql.UDF
pom.xml文件如下 添加hive的依赖关系
<dependencies>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
2、创建evaluate函数,并且实现该函数,注意:大多数的博客说的是重写该函数,指的是重新写一个这个函数,而不是重写UDF类里面的evaluate函数,本人看过源码,UDF类中根本就没有evaluate函数。。。。
3、hive的命令打包提交UDF函数
3.1 使用idea打包jar包,并且将该jar包上传至集群,使用命令
add jar "/opt/UDFDemo.jar"
3.2 创建function
create [temporary] function [daname] function_name AS UDFDemo(类的全类名)
3.3 删除UDF函数
Drop function [if exists ] [dbname.] function_name
{注意事项}
UDF函数必须要有返回值,不能为void ,可以为null
UDF函数的源码如下
package HIVE.UDF;
import org.apache.hadoop.hive.ql.exec.UDF;
public class UDFDemo extends UDF {
public int evaluate(int data){
return data+5;
}
}
实例操作:
1、添加jar包(永久添加)
2、根据该类的全类名去创建函数
3、使用该函数
2个需要注意的地方:
1、在第一步添加jar包的时候,使用的是本机的路径,并且是不需要将双引号
2、在第二步创建函数名称的时候,as后面跟随的全类名的路径是需要使用双引号括起来。
2、UDTF函数
3、UDAF函数