自定义UDF函数
创建一个Maven工程Hive
导入核心依赖(外部pom已经导入了hadoop依赖!!)
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
创建一个类
package com.zhengkw.userfunction;
import org.apache.hadoop.hive.ql.exec.UDF;
/**
* @ClassName:UserUDF
* @author: zhengkw
* @description: 自定义 udf
* @date: 20/03/11上午 12:26
* @version:1.0
* @since: jdk 1.8
*/
public class UserUDF extends UDF {
/**
* @param s
* @descrption: 方法名只能是evaluate!!!!!
* @return: 返回类型不能为void,可以为 null
* @date: 20/03/11 上午 1:06
* @author: zhengkw
*/
public String evaluate(final String s) {
if (s == null) {
return null;
}
//返回一个小写字符串
return s.toLowerCase();
}
}
打成jar包上传到服务器
打包,上传到$HIVE_HOME/auxlib
创建一个目录auxlib
切换到 $HIVE_HOME
mkdir auxlib
重启hive!!!重启hive!!!重启hive!!!
原理
hive在启动时会加载lib里的jar,也会加载lib同级的auxlib(此为用户自定义jar的存放位置,官方要求名字必须是auxlib),这样就能加载成功。
jar的加载方式二
上传到任意位置,一般建立一个目录起名为jar,方便自定义jar的管理!将自定义的jar放入该目录
将jar添加到hive的classpath中
hive (default)> add jar /opt/module/jars/xxx.jar;
用此方法可以不用重启hive!
此方法为官方推荐方法!!!
原理
就是将jar直接用hive中的add jar命令添加入classpath,不需要重启,自动刷新!
创建临时函数与关联自定义UDF全类名
create temporary function myfc as 'com.zhengkw.userfunction.UserUDF';
测试
提前准备好数据,我用的数据是oracle中的scott表里的emp表!
将表数据存入hive中!
select myfc(ename),sal,job from emp;
原数据
总结
- 自定义函数继承于 org.apache.hadoop.hive.ql.exec.UDF
- 在类里必须实现一个evaluate方法,方法名固定!
- 方法返回值类型不能为void!但是返回值可以是null!
- 永久函数是全局且断开session后还依然存在!
- 临时函数断开hive的session后立刻消失!
版权声明:本文为qq_37714755原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。