Hive 自定义UDF函数的保姆级教程

简介: Hive 自定义UDF函数

前言

假如给你一个需求:

自定义一个udf实现计算给定字符串的长度

例如:

select my_len("abcd");
4

详细实现步骤

1. 首先创建一个maven工程

2. 在xml文件中导入hive相关的依赖

<dependencies>
    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-exec</artifactId>
        <version>3.1.2</version>
    </dependency>
</dependencies>

3. 创建一个自定义类MyUDF

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[] objectInspectors) throws UDFArgumentException {
        if (objectInspectors.length != 1){
            throw new UDFArgumentException("参数个数不为1");
        }
        return PrimitiveObjectInspectorFactory.javaIntObjectInspector;
    }
    // 处理数据
    @Override
    public Object evaluate(DeferredObject[] deferredObjects) throws HiveException {
        // 1.取出输入数据
        String input = deferredObjects[0].toString();
        // 2.判断输入数据是否为null,防止null指针异常
        if (input == null){
            return 0;
        }
        // 3.返回输入数据的长度
        return input.length();
    }
    @Override
    public String getDisplayString(String[] strings) {
        return "";
    }
}

4. 打成jar包上传到服务器/opt/module/data/myudf.jar

5. 将jar包添加到 hive 的 classpath

hive> add jar /opt/module/data/myudf.jar

6. 创建临时函数与开发好的Java class关联

hive> create temporary function my_len as "com.bsk.hive.MyUDF";

7. 在hql中使用自定义函数

hive> select my_len(name) name_len from test;
相关文章
|
5月前
|
SQL HIVE
Hive LAG函数分析
Hive LAG函数分析
38 0
|
12天前
|
SQL Java 数据处理
【Hive】Hive的函数:UDF、UDAF、UDTF的区别?
【4月更文挑战第17天】【Hive】Hive的函数:UDF、UDAF、UDTF的区别?
|
12天前
|
SQL 数据处理 HIVE
【Hive】写出Hive中split、coalesce及collect_list函数的用法?
【4月更文挑战第17天】【Hive】写出Hive中split、coalesce及collect_list函数的用法?
|
2月前
|
SQL Unix 数据挖掘
bigdata-21-Hive基本函数
bigdata-21-Hive基本函数
24 0
|
2月前
|
SQL HIVE
Hive中日期处理函数的使用(date_format、date_add、date_sub、next_day)
Hive中日期处理函数的使用(date_format、date_add、date_sub、next_day)
|
3月前
|
SQL 消息中间件 Apache
Flink报错问题之使用hive udf函数报错如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
4月前
|
SQL 搜索推荐 Java
Hive中的UDF是什么?请解释其作用和使用方法。
Hive中的UDF是什么?请解释其作用和使用方法。
39 0
|
5月前
|
SQL 分布式计算 Java
Hive自定义函数UDF编写
Hive自定义函数UDF编写
35 2
|
5月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
104 1
|
5月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
78 0