1. 程式人生 > 其它 >hive新增自定義函式

hive新增自定義函式

hive新增自定義函式方式有兩種,一種是繼承UDF ,另一種繼承GenericUDF

UDF開發較為方便,先新版本中已被棄用,建議使用GenericUDF org.apache.hadoop.hive.ql.exec.UDF

GenericUDF開發更加靈活,但也增加了複雜成本 org.apache.hadoop.hive.ql.udf.generic.GenericUDF

以下以,UDF開發演示自定義函式的,整體過程:

1.新建maven工程,新增如下依賴

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

如新增判斷是否為空自定義函式,程式碼如下:

package com.bigdata.hive.udf;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import java.util.regex.Pattern;
/**
 * 自定義UDF函式
 * 輸入:Tom
 * 輸出:hello:Tom
 
*/ @Description( name = "udf_is_null", value = "_FUNC_(str) - Returns str is null?0:1", extended = "Example:\n > SELECT _FUNC_(\'Facebook\') FROM src LIMIT 1;\n return 1 " ) public class UdfIsNull extends UDF { public int evaluate(final String s) { if (s == null
|| s.toString().trim().toLowerCase().equals("null") || Pattern.matches("\\s+",s.toString())||s.toString().trim().equals("")) { return 0; } return 1; } public static void main(String[] args) { System.out.println("值為"+new UdfIsNull().evaluate(new String("null" ))); } }

方式一:新增臨時函式(僅當前會話有效)

a)將jar上傳至伺服器,進入hive,執行: add jar /root/jar/hive_function-1.0-SNAPSHOT.jar;

b)執行命令,新增臨時函式:create temporary function udf_is_null as 'com.bigdata.hive.udf.UdfIsNull';

c)檢視函式 desc function udf_is_null;

d)測試函式:select udf_is_null(“”);

方式二:新增永久函式(永久函式,建立後可以在任意客戶端使用)

a)jar上傳至hdfs檔案系統:hdfs dfs -put ./hive_function-1.0-SNAPSHOT.jar /libs

b)進入hive,建立函式

create function udf_is_null

as 'com.bigdata.hive.udf.UdfIsNull'

using jar 'hdfs:///libs/hive_function-1.0-SNAPSHOT.jar'