大数据—Hive(八)_自定义函数

1、自定义函数概念

a、UDF(User-Defined-Function)
一进一出

b、UDAF(User-Defined Aggregation Function)
多进一出

c、UDTF(User-Defined Table-Generating Functions)
一进多出——lateral view explode()

2、案例

需求
编写UDF函数,返回输入字符串的长度

代码

父模块添加依赖

<!--子模块都会公用的模块-->
<dependencies>
    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-exec</artifactId>
        <version>3.1.2</version>
    </dependency>
</dependencies>

子模块编写UDF函数

package com.atguigu.udf;

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 MyUDF extends GenericUDF {
    @Override
    public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
        //校验参数个数
        if(arguments.length != 1){
            throw new UDFArgumentException("参数个数不为1");
        }
        //返回值是int【字符串长度】
        return PrimitiveObjectInspectorFactory.javaIntObjectInspector;
    }

    @Override
    public Object evaluate(DeferredObject[] arguments) throws HiveException {
        //取出输入参数
        String input = arguments[0].toString();
        if(input == null){
            return 0;
        }
        //返回输入数据长度
        return input.length();
    }

    //处理执行计划
    @Override
    public String getDisplayString(String[] children) {
        return null;
    }
}

打包放到服务器上
在这里插入图片描述

添加jar包

add jar /opt/module/hive/lib/hive-demo-1.0-SNAPSHOT.jar
create temporary function my_len2 as "com.atguigu.udf.MyUDF";

使用自定义函数

select my_len2("12345")

结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据之负

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值