目錄
一、自定義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;