- 根据用户自定义函数类别分为以下三种:
- UDF(user-defined function):一进一出
- UDAF:聚集函数,多进一出(类似于:count/max/min)
- UDTF:一进多出 eg.lateral view explode()
- 编程步骤:(1)继承Hive提供的类:
org.apache.hadoop.hive.ql.udf.generic.GenericUDF
org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;
(2)实现类中的抽象方法
(3)在Hive的命令行窗口创建函数:①添加jar:
add jar linux_jar_path
②创建function:
create [temporary] function [dbname.] function_name AS calss_name;
- 在Hive的命令行窗口删除函数
drop [temporary] function [if exists] [dename.] function_name;
- 自定义UDF函数:(1)需求:自定义一个UDF实现计算给定字符串的长度
eg.hive(default) > select my_len(“abcd”)
4
(2)创建一个Maven工程Hive
- 导入依赖:
(4)创建一个类:
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();
}
}