hive自定义UDF函数,步骤详解

目录
一、自定义UDF函数--计算字符串长度
1、添加pom.xml文件
2、自定义UDF函数,java类
3、打包上传到liunx
二、创建hive函数
1、hive客户端,添加jar包
2、创建hive函数
3、测试并查看结果

UDF函数是一进一出函数,如hive中的substr、date_add、date_sub都是UDF函数。

hive的udf有两种实现方式或者实现的API,一种是udf比较简单,一种是GenericUDF比较复杂

自定义UDF函数步骤如下:

方式1:UDF
  • 1)继承org.apache.hadoop.hive.ql.exec.UDF
  • 2)重写evaluate()方法
    该方法必须有返回值,evaluate方法支持重载。业务逻辑处理写在evaluate()方法中。对于每行数据都会调用一次evaluate()函数

注意继承UDF类时,不会报错、不需要实现抽象方法,这时需要我们重写evaluate()方法,而且方法名必须是evaluate。

备注:
如果所操作的数据类型都是基础数据类型,如(Hadoop&Hive 基本writable类型,如Text,IntWritable,LongWriable,DoubleWritable等)。那么简单的org.apache.hadoop.hive.ql.exec.UDF就可以做到。

方式2:GenericUDF
  • 1)继承抽象类org.apache.hadoop.hive.ql.udf.generic.GenericUDF
  • 2)重写initialize、evaluate、getDisplayString方法

一、自定义UDF函数--计算字符串长度

1、添加pom.xml文件

<properties>
    <project.build.sourceEncoding>UTF8</project.build.sourceEncoding>
    <hive.version>1.2.1</hive.version>
</properties>

<dependencies>
    <!--添加hive依赖-->
    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-exec</artifactId>
        <version>${hive.version}</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2、自定义UDF函数,java类

package com.atguigu.udf;
import org.apache.hadoop.hive.ql.exec.UDF;

public class LengthUDF extends UDF {
    //业务逻辑处理
    //evaluate方法的参数为,hive函数中作用的字段类型
    //int 返回值类型可以是int ,也可以是string,或者是其他数据类型
    public int evaluate(String line){
        int lineLength = line.length();
        return lineLength;
    }
    
}

编写一个UDF,关键在于自定义Java类需要继承UDF类并实现evaluate()函数。
因为在hive客户端执行查询时,对于每行输入都会调用evaluate()函数,evaluate()函数处理后的值会返回给hive。

3、打包上传到liunx

二、创建hive函数

1、hive客户端,添加jar包

在hive客户端,将xxx HiveUDF.jar文件加载到类路径:

add jar /home/atguigu/bin/hivefunction-20220111-1.0-SNAPSHOT.jar;

2、创建hive函数

1) 创建临时函数语法:

CREATE TEMPORARY FUNCTION function_name AS class_name;  

# function_name 函数名  
# class_name 类路径,包名+类名 

2)创建永久函数语法

create function small as 'com.qqhru.hive.LogUDTF' using jar '/user/hive/jars/1.jar';

  • 这里测试,我们创建临时函数
CREATE TEMPORARY FUNCTION LengthUDF AS 'com.atguigu.udf.LengthUDF'; 

//cn.hust.book.bigdata.UDFDemo对应java程序包名+类名

3、测试并查看结果

select LengthUDF(name),name from person;

参考文章:hive自定义函数UDF的使用方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章