Hive中用户自定义函数UDF、UDAF、UDTF的定义以及UDF具体实现

前言

        在Hive学习中,我们刚接触到用户自定义函数可能会有点不理解,下面我就根据我所知的来给跟我遇到过同样问题的人一点帮助。

目录

前言

简单定义

UDF具体实现预应用

运用


简单定义

UDF,源自于英文user-defined function。

我们根据函数输入输出的行数可以将其分为三类:UDF、UDAF、UDTF(不仅适用于用户自定义函数)

UDF:普通函数,特点是一进一出。例如取整函数round,接收一行数据,输出一行数据。

UDAF:聚合函数,A即Aggregation聚合的意思,特点是多进一出。可以简单理解为把一堆数据收集起来处理,输出一个统一结果。像count、sum、min、max以及数据收集函数collect_set()和collect_list等都属于聚合函数。

UDTF:表生成函数,T即Table-Generating表生成的意思,特点是一进多出。这种类型的函数作用返回的结果类似于表,同时UDTF也是我们接触比较少的函数。


UDF具体实现预应用

其实UDF的应用并不难,我大致分为以下几个步骤:

第一步:在IDEA中创建一个maven工程,写一个类继承UDF,并重载evaluate方法,方法中实现函数的业务逻辑。重载也意味着可以在一个java类中实现多个函数功能。

第二步:程序打成jar,上传到HDFS上(不会打包的可以看下面图)

第三步:客户端命令行中添加jar包到Hive的classpath,命令:

add jar /xxx/udf.jar;

(classpath 可以用于指定其他依赖项的位置,比如自定义的 UDF(用户自定义函数)或外部的 JAR 文件等。通过将这些依赖项添加到 classpath 中,Hive 可以在运行时访问它们。)

第四步:注册成为临时函数,命令:

create temporary function 函数名 as 'UDF类全路径';

(虽然第三步中将 UDF 的 JAR 包添加到 classpath中,但仅如此是无法直接使用 UDF 的,还需要将 UDF 注册到 Hive 中,将 UDF 声明为 Hive 可以识别和使用的函数。)

出现OK即代表成功注册,如果出现下面这种情况,则是全包路径出现错误或不一致导致。

运用

如果你上述都没有问题,那么就可以愉快的使用了你自己的udf了,下面是我的运用演示。