【Hive】创建自定义的UDF函数

创建自定义的UDF函数

导入依赖

  • 只需要倒入一个依赖即可
    <dependencies>
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>3.1.2</version>
        </dependency>
    </dependencies>

代码部分

import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;

/**
 *一进一出
 */
public class UDFTest01  extends GenericUDF {
    /**
     * 这是初始化方法,只执行一次
     * 校验参数个数
     * @param objectInspectors
     * @return
     * @throws UDFArgumentException
     */
    @Override
    public ObjectInspector initialize(ObjectInspector[] objectInspectors) throws UDFArgumentException {
        if (objectInspectors.length!=1){
            throw new UDFArgumentException("参数个数不为一");
        }
        //设置函数返回值的类型
        return PrimitiveObjectInspectorFactory.javaIntObjectInspector;
    }

    /**
     * 处理方法,一条数据执行一次
     * @param deferredObjects
     * @return
     * @throws HiveException
     */
    @Override
    public Object evaluate(DeferredObject[] deferredObjects) throws HiveException {
        //取出输入函数
        String input = deferredObjects[0].get().toString();//强调,个体方法必须要写

        //判断输入数据是否为空
        if (input==null){
            return 0;
        }
        //返回输入数据的长度
        return input.length();
    }

    /**
     * 执行计划,一般自定义的函数很少写执行计划,一般都是给空值
     * @param strings
     * @return
     */
    @Override
    public String getDisplayString(String[] strings) {
        return "";
    }
}

创建函数

  1. 将jar包传入集群
  2. 打开hive并且导入jar包(如果将jar包直接放入hive的lib目录的话,这一步可忽略)add jar jar_path
  3. 在hive中创建函数create function function_name as 'class_path'function_name是为你自定义的函数取名,class_path是class文件的路径
  4. 如果不想使用可以删除函数drop function function_name
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值