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文件


    UTF8
    1.2.1



    
    
        org.apache.hive
        hive-exec
        ${hive.version}
    



    
        
            maven-compiler-plugin
            2.3.2
            
                1.8
                1.8
            
        
        
            maven-assembly-plugin
            
                
                    jar-with-dependencies
                
            
            
                
                    make-assembly
                    package
                    
                        single
                    
                
            
        
    


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的使用方法

你可能感兴趣的:(hive自定义UDF函数,步骤详解)