hive自定义UDF函数,步骤详解

hive自定义UDF函数,步骤详解,第1张

UDF函数是一进一出函数,如hive中的substr、date_add、date_sub都是UDF函数。

hive的udf有 两种 实现方式或者实现的API,一种是 udf 比较简单,一种是 GenericUDF 比较复杂

注意继承UDF类时,不会报错、不需要实现抽象方法,这时需要我们重写evaluate()方法,而且方法名必须是evaluate。

编写一个UDF,关键在于自定义Java类需要继承UDF类并实现evaluate()函数。

因为在hive客户端执行查询时,对于 每行输入 都会调用evaluate()函数,evaluate()函数处理后的值会返回给hive。

在hive客户端,将 xxx HiveUDF.jar 文件加载到类路径:

1) 创建临时函数语法:

2)创建永久函数语法

参考文章:hive自定义函数UDF的使用方法

udf的全称是User Defined Function用户自定义函数,创建后可以直接在select语句中使用

使用中需要注意的是,创建一个udf需要继承org.apache.hadoop.hive.ql.exec.UDF,并且要对evaluate进行overwrite

所以开发工程需要至少加上依赖包

然后创建一个类继承UDF,实现evaluate方法可以实现传入一个数据返回一个数据的效果

下面以信息脱敏为例

以上通过调用函数传入信息,然后数据处理后会返回一个脱敏信息。

接着需要用maven对这个进行package,生成jar包,将文件上传到服务器上。

以下流程注意登陆账户是否有权限

并建议将此jar包上传到分布式文件系统上,可以参考如下命令:

hdfs dfs -put /home/hive-udf/desensitization.jar /lib/hive_udf/

然后可以通过hdfs dfs -ls /lib/hive_udf/查看已上传成功的包

然后进入hive客户端:可以直接在服务器上使用hive的bin包下的hive进行直接连接,也可以是其他连接方式。

这里有两种方法进行创建,一个是创建临时函数,一个是创建永久函数

1.创建临时函数

用此种方式的话,请在sql前加上后面两句

add jar hdfs:///lib/hive_udf/desensitization.jar

create temporary function desensitization as 'com.sfz.Desensitization'

注意:这里的desensitization为以后调用的函数名,com.sfz.Desensitization为jar包里的类路径。

然后可以进行测试

select desensitization("我是傻疯子")

最后删除命令为:(临时函数可以不用删除,窗口关闭后会消失)

drop temporary function desensitization

2.创建永久函数

CREATE FUNCTION udf.desensitization AS 'com.sfz.Desensitization' USING JAR 'hdfs:///lib/hive_udf/desensitization.jar'

删除命令为DROP FUNCTION IF EXISTS udf.desensitization

如果需要全局生效,目前来看需要重启hive,否则只对当前客户端有效。

在hive中,有时候一些内置的函数,和普通的查询 *** 作已经满足不了我们要查询的要求,这时候可以自己写一些自定义函数来处理。自定义函数(user defined function =UDF)

由于hive本身是用java语言开发,所以udf必须用java来写才可以。

Hive中有三种UDF

编写UDF必须满足一下:

下面展示如何编写一个普通的UDF

1、编写类,继承UDF类,重写evaluate方法

2、 打包后上传到客户端所在的目录

3、使用该函数前,需要执行以下两行命令:

4、在sql中使用该函数


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11405735.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存