udtf和udf不同點在於,udtf是一對多,而udf是一對一;
udtf(user-defined table-generating function):使用者定義表生成函式,用來解決輸入一行,輸出多行的場景。
編寫udtf需要繼承genericudtf類,然後重寫initialize方法和process方法和close方法
方法用途:
initialize方法主要是初始化返回的列和返回的列型別
process方法對輸入的每一行進行操作, 他通過呼叫forward()返回一行或者多行資料
close方法在process方法結束後呼叫,用於進行一些其他的操作,只執行一次
建立類並繼承genericudtf
重寫initialize方法、process方法和close方法
當有一行多列時,通過呼叫forward()分割後有幾列就返回幾列資料
public
class
myudtffun
extends
genericudtf
@override
public
void
process
(object[
] objects)
throws hiveexception
@override
public
void
close()
throws hiveexception
當有一行多列時,通過呼叫forward()根據其中一列返回多行資料
public
class
myudtffun
extends
genericudtf
@override
public
void
process
(object[
] objects)
throws hiveexception );
}}@override
public
void
close()
throws hiveexception
當有多行多列時,通過呼叫forward()把一行變成多行,分割後有幾列就變成幾列
導成瘦包放到linux的opt目錄下
從linux中載入jar包
add jar /opt/myfun.jar
建立temporary 臨時函式
create temporary function myudtf as"com.hive.myudtffun";
呼叫函式 一對多時
用側檢視獲得多列的值
select explode(split(hobby,』,』)) from myusers;
或重新建臨時函式後,重新導包呼叫
獲得多行多列的值,重新建臨時函式後,重新導包呼叫
select username ,lk from myusers lateral view myud(hobby) a as lk;
或者用側檢視
總結
由此可以發現udtf 和側檢視一樣使用 ,當一列拆成多列或多行時,先進行分割在返回多行資料
Hive實現UDF自定義函式
前面講過很多函式,今天就說下udf自定義函式 編寫udf有兩種方式 1.繼承 udf 重寫evaluate方法 2.繼承 genericudf,重寫initialize getdisplaystring evaluate方法 org.apache.hadoop groupid hadoop comm...
hive自定義函式
1.建立類,繼承udf package com.hivedemo.udf import org.apache.hadoop.hive.ql.exec.description import org.apache.hadoop.hive.ql.exec.udf 自定義hive函式 description...
Hive 自定義函式
返回 所有自帶的函式 show functions 返回對該函式的解釋 desc function spilt 返回對該函式的使用例子 desc function extended split1.udf user defined function datediff,date format 等函式 一...