Hive 10、Hive的UDF、UDAF、UDTF


Hive自定義函數包括三種UDF、UDAF、UDTF

  UDF(User-Defined-Function) 一進一出

  UDAF(User- Defined Aggregation Funcation) 聚集函數,多進一出。Count/max/min

  UDTF(User-Defined Table-Generating Functions)  一進多出,如lateral view explore()

  使用方式 :在HIVE會話中add 自定義函數的jar文件,然后創建function繼而使用函數

UDF

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

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

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

  b)需要實現evaluate函數,evaluate函數支持重載。

  例:寫一個返回字符串長度的Demo:

import org.apache.hadoop.hive.ql.exec.UDF;

public class GetLength extends UDF{
    public int evaluate(String str) {
        try{
            return str.length();
        }catch(Exception e){
            return -1;
        }
    }
}

3、步驟

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

  b)進入hive客戶端,添加jar包:

hive> add jar /root/hive_udf.jar

  c)創建臨時函數:

hive> create temporary function getLen as 'com.raphael.len.GetLength';

  d)查詢HQL語句:

hive> select getLen(info) from apachelog;
OK
60
29
87
102
69
60
67
79
66
Time taken: 0.072 seconds, Fetched: 9 row(s)

  e)銷毀臨時函數:

hive> DROP TEMPORARY FUNCTION getLen;

 

UDAF

多行進一行出,如sum()、min(),用在group  by時

1.必須繼承

  org.apache.hadoop.hive.ql.exec.UDAF(函數類繼承)

  org.apache.hadoop.hive.ql.exec.UDAFEvaluator(內部類Evaluator實現UDAFEvaluator接口)

2.Evaluator需要實現 init、iterate、terminatePartial、merge、terminate這幾個函數

  init():類似於構造函數,用於UDAF的初始化

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

  terminatePartial():無參數,其為iterate函數輪轉結束后,返回輪轉數據,類似於hadoop的Combiner

  merge():接收terminatePartial的返回結果,進行數據merge操作,其返回類型為boolean

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

 

  #開發一個功能同:

  #Oracle的wm_concat()函數

  #Mysql的group_concat()

   UDAF 詳細文檔:http://www.cnblogs.com/ggjucheng/archive/2013/02/01/2888051.html

UDTF

  UDTF 詳細文檔: http://www.cnblogs.com/ggjucheng/archive/2013/02/01/2888819.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM