寫UDF和UDAF的格式

2021-09-26 14:52:28 字數 1448 閱讀 2594

1、udf 函式可以直接應用於 select 語句,對查詢結構做格式化處理後,再輸出內容。

2、編寫 udf 函式的時候需要注意一下幾點:

a)自定義 udf 需要繼承 org.apache.hadoop.hive.ql.udf。

b)需要實現 evaluate 函式,evaluate 函式支援過載。

3、步驟

a)把程式打包放到目標機器上去;

b)進入 hive 客戶端,新增 jar 包

方式1:

hive> add jar trim.jar

方式2:

在啟動時在命令後傳遞 --auxpath選項, --auxpath後面為jar包所在的路徑

例如,我的jar包所在目錄的路徑為:/usr/hive/myjar/,則可以用以下幾種方式啟動hive

hive --auxpath /usr/hive/myjar/trim.jar 或

hive --auxpath /usr/hive/myjar/*.jar (這種方式jar包名稱和類名稱要一致,否則出錯) 或

hive --auxpath /usr/hive/myjar/

c)建立臨時函式:hive>create temporary function add_example as 'hive.udf.add';

d)查詢 hql 語句:

select  add_example(8,  9)  from  scores;

select  add_example(scores.math,  scores.art)  from  scores;

select  add_example(6,  7,  8,  6.8)  from  scores;

e)銷毀臨時函式:hive>  drop  temporary  function  add_example;

多行進一行出,如

sum()

、min()

,用在group

by 時

1.必須繼承org.apache.hadoop.hive.ql.exec.udaf(函式類繼承)

org.apache.hadoop.hive.ql.exec.udafevaluator(內部類 eval uator 實現 udafevaluator 介面)

evaluator 需要實現 init、iterate、terminatepartial、merge、t erminate 這幾個函式

init():類似於建構函式,用於 udaf 的初始化

iterate():接收傳入的引數,並進行內部的輪轉,返回 boolean

terminatepartial():無引數,其為 iterate 函式輪轉結束後,返回輪轉資料,類似於 hadoop 的 combinermerge():接收 terminatepartial 的返回結果,進行資料 merge 操作,其返回型別為 boolean

terminate():返回最終的聚集函式結果

Hive自定義UDF和聚合函式UDAF

hive是一種構建在hadoop上的資料倉儲,hive把sql查詢轉換為一系列在hadoop集群中執行的mapreduce作業,是mapreduce更高層次的抽象,不用編寫具體的mapreduce方法。hive將資料組織為表,這就使得hdfs上的資料有了結構,元資料即表的模式,都儲存在名為metas...

Hive自定義UDF和聚合函式UDAF

一 hive可以允許使用者編寫自己定義的函式udf,來在查詢中使用。hive中有3種udf udf 操作單個資料行,產生單個資料行 udaf 操作多個資料行,產生乙個資料行。udtf 操作乙個資料行,產生多個資料行乙個表作為輸出。二 編寫自己定義的函式udf 第一步 繼承udf或者udaf或者udt...

Hive自定義UDF和聚合函式UDAF

hive是一種構建在hadoop上的資料倉儲,hive把sql查詢轉換為一系列在hadoop集群中執行的mapreduce作業,是mapreduce更高層次的抽象,不用編寫具體的mapreduce方法。hive將資料組織為表,這就使得hdfs上的資料有了結構,元資料即表的模式,都儲存在名為metas...