Hive UDF的编写

=Start=

缘由:

有时候Hive提供的官方函数不能/很难满足业务需求,这时我们可以采用Hive提供的更加灵活的解决方案:UDF(User Defined Function, 用户自定义函数)。在这里简单整理一下Hive中编写UDF的方法,方便以后需要的时候参考。

正文:

参考解答:
常见的3种 Hive 自定义函数

(1) UDF(user-defined function) 一进一出,给定一个输入,输出一个处理后的数据。许多Hive内置字符串,数学函数,时间函数都是这种类型。大多数情况下编写对应功能的处理函数就能满足需求。如:concat, split, length ,rand等。这种UDF主要有两种写法:继承实现 UDF类 和 继承GenericUDF类(通用UDF)。

(2) UDAF(user-defined aggregate function) 多进一出,属于聚合函数,类似于count、sum等函数。一般配合group by使用。主要用于累加操作,常见的函数有max, min, count, sum, collect_set等。这种UDF主要有两种写法:继承实现 UDAF类 和 继承实现 AbstractGenericUDAFResolver类 。

(3) UDTF(user-defined table function) 一进多出,将输入的一行数据产生多行数据或者将一列打成多列。如explode函数通常配合lateral view使用,实现列转行的功能。parse_url_tuple将一列转为多列。

在决定编写自己的函数之前,可以先看看Hive中已经有了哪些函数及其功能:

show functions; --查看已有函数
describe function concat; --查看函数用法
describe function extended concat; --查看函数的用法和示例

通用UDF的编写示例及说明

通用UDF的实现很简单,只需要继承UDF,然后实现evaluate()方法就行了。

要点就 2 个:
(1) 继承类 org.apache.hadoop.hive.ql.exec.UDF ;
(2) 至少实现一个 evaluate() 方法, evaluate 方法可以使用不同个数和类型的参数。

evaluate()方法支持的类型如下:

编写、测试好了之后打成一个jar包,然后上传使用即可,具体的根据各自搭建的环境对应手册操作即可。

自定义函数的调用过程(添加、创建、调用)
  • ①添加 jar 包(在Hive命令行里面执行)

hive> add jar /path/to/StripUDF.jar;

  • ②创建临时函数

hive> create temporary function strip as 'com.ixyzero.hive.udf.StripUDF';

临时函数的缺点是在下次启动Hive集群时自动失效(可以每次在用的时候都先add再create)。当然,我们也可以直接创建永久函数,这样就不用担心失效的问题了,问题在于创建过程比较复杂,需要修改源码。

  • ③调用

hive> select strip(' space will be strip ') as result;

参考链接:

HIVE UDF函数编写
https://github.com/delongwu/techdoc/wiki/HIVE-UDF%E5%87%BD%E6%95%B0%E7%BC%96%E5%86%99

Hive UDF教程(一)
https://blog.csdn.net/u010376788/article/details/50532166
Hive UDF教程(二)
https://blog.csdn.net/u010376788/article/details/50537984
Hive UDF教程(三)
https://blog.csdn.net/u010376788/article/details/50540633

官方文档
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
https://cwiki.apache.org/confluence/display/Hive/HivePlugins

https://blog.matthewrathbone.com/2013/08/10/guide-to-writing-hive-udfs.html

https://snowplowanalytics.com/blog/2013/02/08/writing-hive-udfs-and-serdes/

https://dzone.com/articles/writing-custom-hive-udf-andudaf

Hive简易教程 – 自定义UDF
https://www.jianshu.com/p/7f8329443aae

Hive入门–3.UDF编写与使用
https://blog.csdn.net/u014726937/article/details/51985177

hive udf开发超详细手把手教程
https://blog.csdn.net/bitcarmanlee/article/details/51249260

Hive添加自定义UDF函数
https://liam-blog.ml/2016/04/11/add-udf-to-hive/

Hive基础之UDF编程
https://zhuanlan.zhihu.com/p/58072588

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/4782.html

《Hive UDF的编写》上有2条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注