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

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