Hive自定义UDF函数

自定义UDF函数

导入自定义udf.jar的第3种方式!

创建一个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版权协议,转载请附上原文出处链接和本声明。