Hive中UDF的使用

2021-07-07 06:15:10 字數 1370 閱讀 6965

udf (user-defined function)是對hive自帶函式的一種補充,並極大擴充了hql的作用範圍,不僅使**更加簡潔,也減少了很多重複工作,提高任務執行效率。

udf.rank

該函式用於分組limit輸出,如『拉取每個使用者的前100條語料』,需要對使用者cuid進行分組後,再分別取每組的前100條語料。該函式原理為根據指定列的值(如cuid)對每一行進行遞增編號,當指定列的值變化時再重新從0開始編號,利用這種方式,可以cluster by cuid後使用該函式編號得到乙個新列,在where條件中過濾編號值小於100的行,即得到每組的前100條記錄。該udf只有乙個引數,引數值為指定的分組依據(如cuid)。

udf.concat

該函式用於合併連線多行,如『取使用者在多天的訪問記錄,並將這些記錄用』|』分割』,需要對使用者每天的記錄都取出來後再將多行的值拼接到一行裡。目前hive自帶的連線函式裡有concat,作用為將兩個列合併為一列,但如果想把多行的值合併連線到一行,則需要使用udf。該udf有兩個引數,第乙個引數為需要合併的列名,第二個引數為指定的分隔符號。

拷貝tools.jar到工作目錄

在hql開頭加上如下內容:

add jar tools.jar;

create temporary function rankcol as 『udf.rank』;

說明:在hql語句裡呼叫:

select userid,log from (

select userid,log,rankcol(userid) as colid from

(select userid,log from testlog cluster by userid) tmpin

) tmpout

where colid<100;

以上表示從testlog裡根據userid取每個使用者的前100條記錄

拷貝tools.jar到工作目錄

在hql開頭加上如下內容:

add jar tools.jar;

create temporary function concattag as 『udf.concat』;

說明:在hql語句裡呼叫:

select userid,city,concattag(tags,'|') as totaltags from(

select userid,city,tags from

usertags

) tmp

group by userid,city;

以上表示從usertags表裡取使用者在各個城市的訪問記錄,並用』|』連線,按使用者userid輸出。

HIVE中的UDF程式設計

udf 一進一出 udaf 多進一出 aggregation 聚集 類似於count max min udtf 一進多出 show functions 檢視乙個函式的使用 desc function extended upper 1.修改pom.xml junit junit 4.10 test o...

使用Python實現Hive的UDF示例

主要分為兩個部分,乙個部分為python指令碼實現想要實現的功能,另外乙個部分為hql部分,呼叫python指令碼對資料進行處理。hql呼叫python實現的udf其實有乙個重定向的過程,把資料表中之列的列重定向python的標準輸入中,按行操作,首先將每行按照指定的分割符分開,一般為 t 然後剩下...

hive中的udf時間函式用法

1 from unixtime函式 用法為將時間戳轉換為時間格式 語法 from unixtime bigint unixtime string format 返回值為string 例如 hive select from unixtime 1326988805,yyyymmddhh from tes...