日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hive的UDF概念

發布時間:2024/8/23 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hive的UDF概念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先我們學習hadoop的時候,為了讓我們不太會java語言但是對SQL很熟悉的工程師能夠操作基本的mapreduce計算過程,Hive被設計出來了。Hive就好比是hadoop在執行MR(mapreduce)程序的一個操作系統,因為我們可以用簡單的SQL語句去代替復雜的MR程序,因為Hive可以將我們的SQL語句轉化為MR程序然后去執行。Hive的語法和SQL的語法很多地方是相同的,所以說它就是為熟連使用SQL的工程師設計的。

首先什么是UDF,UDF的全稱為user-defined function,用戶定義函數,為什么有它的存在呢?有的時候 你要寫的查詢無法輕松地使用Hive提供的內置函數來表示,通過寫UDF,Hive就可以方便地插入用戶寫的處理代碼并在查詢中使用它們,相當于在HQL(Hive SQL)中自定義一些函數。

首先UDF必須用java語言編寫,Hive本身就是用java寫的。所以想學好hadoop這個分布式框架的相關技術,熟練使用java就是基本功了!

Hive中有三種UDF:(普通)UDF、用戶定義聚集函數(user-defined aggregate function,UDAF)、用戶定義表生成函數(user-defined table-generating function,UDTF)。

UDF操作作用于單個數據行,并且產生一個數據行作為輸出。大多數函數都屬于這一類(比如數學函數和字符串函數)。

UDAF 接受多個輸入數據行,并產生一個輸出數據行。想COUNT和MAX這樣的函數就是聚集函數。

UDTF 操作作用于單個數據行,并且產生多個數據行-------一個表作為輸出

首先一個UDF必須滿足下面兩個條件:

1 一個UDF必須是org.apache.hadoop.hive.ql.exec.UDF的子類(換句話說就是我們一般都是去繼承這個類)

2 一個UDF必須至少實現了evaluate()方法

注意UDF名不是大小寫敏感的

一個UDAF計算函數必須實現下面的5個方法:

1 init()方法 init()方法負責初始化計算函數并重設它的內部狀態。在MaximumIntUDAFEvaluator中,我們把存放最終結果的IntWritable對象設置為null。我們使用null來表示目前還沒有對任何值進行聚集計算,這和對空集NULL計算最大值應有的結果是一致的。

2 iterate()方法 每次對一個新值進行聚集計算時都會調用iterate()方法。計算函數要根據聚集計算的結果更新其內部狀態。iterate()接受的參數和Hive中被調用函數的參數使對應的。

3 terminatePartial()方法 Hive需要部分聚集結果時會調用terminatePartial()方法。這個方法必須返回一個封裝了聚集計算當前狀態的對象。

4 merge()方法 在Hive決定要合并一個部分聚集值和另一個部分聚集值時會調用merge()方法。該方法接受一個對象作為輸入。這個對象的類型必須和terminatePartial()方法返回的類型一致。

5 terminate() Hive需要最終聚集結果時會調用terminate()方法。計算函數需要把狀態作為一個值返回。

具體去寫UDF的過程我這里就不具體說了,我來說說,怎樣去把我們寫好的UDF放到Hive中去使用:

首先我們將用java寫好的UDF函數編譯后的Java類打包成為一個JAR文件,并在Hive中注冊這個文件(相當于告訴Hive這個是我寫的UDF):

轉載”https://blog.csdn.net/yqlakers/article/details/70211522

總結

以上是生活随笔為你收集整理的Hive的UDF概念的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。