hive自定义udf函数超详细版(可变参数传参)

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连接无法使用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值