1、创建maven项目,添加pom依赖,版本应与hive版本保持一致。
2、创建一个类,必须继承自UDF类,自定义方法为了去除重复字段。
package com.necibook.jhb;
import com.google.common.base.Strings;
import org.apache.commons.collections.CollectionUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.util.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
/**
* 自定义udf函数
* @author jianghaibo
* @date 2021/6/17 11:44
*/
public class UdfToString extends UDF {
/**
* 自定义函数 去除重复字
* @param params
* @return
*/
public static String evaluate(String... params){
HashSet hashSet=new HashSet();
String join="";
for(String param:params){
List list=new ArrayList();
if(!Strings.isNullOrEmpty(param)){
String[] split1 = param.split(",");
list = Arrays.asList(split1);
}
if(CollectionUtils.isNotEmpty(list)){
hashSet.addAll(list);
}
if(CollectionUtils.isNotEmpty(hashSet)){
join = StringUtils.join(",", hashSet);
}
}
return join;
}
/* public static void main(String[] args) {
String s = evaluate("sss","1,4,5", "1,6,7,8");
System.out.println(s);
}*/
}
3、打成jar包,上传到服务器上
4、将服务器上的jar包上传到hdfs 上
[hive@ecs-bd4b-0002 ~]$ hadoop fs -put udfToString.jar /user/hive/
5、连接hive 找到自己对应的库去创建一个测试用表
CREATE TABLE IF NOT EXISTS testhb (
unit_id string COMMENT '单位ID',
school_id string COMMENT '学校id',
user_id string COMMENT '用户id'
)stored as parquet;
6、--插入数据
Insert into table testhb values(‘1,2,3’,’1,4,5’,’2,3,7,8’);
7、创建usfToString 函数
study为自己的库名称,com.necibook.jhb.UdfToString 为自己创建的类的包名+类名
8、创建成功后可通过语句进行测试
Select udfToString(user_id,school_id,ubit_id) from testhb;
结果如下:
切记创建好自定义的函数后,重新连接hive,beeline连接无法使用。