Struct復雜數據類型的UDF編寫、GenericUDF編寫


一、背景介紹:

MaxCompute 2.0版本升級后,Java UDF支持的數據類型從原來的BIGINT、STRING、DOUBLE、BOOLEAN擴展了更多基本的數據類型,同時還擴展支持了ARRAY、MAP、STRUCT等復雜類型,以及Writable參數。Java UDF使用復雜數據類型的方法,STRUCT對應com.aliyun.odps.data.Struct。com.aliyun.odps.data.Struct從反射看不出Field Name和Field Type,所以需要用@Resolve注解來輔助。即如果需要在UDF中使用STRUCT,要求在UDF Class上也標注上@Resolve注解。但是當我們Struct類型中的field有很多字段的時候,這個時候需要我們去手動的添加@Resolve注解就不是那么的友好。針對這一個問題,我們可以使用Hive 中的GenericUDF去實現。MaxCompute 2.0支持Hive風格的UDF,部分Hive UDF、UDTF可以直接在MaxCompute上使用。

二、復雜數據類型UDF示例

示例定義了一個有三個復雜數據類型的UDF,其中第一個用ARRAY作為參數,第二個用MAP作為參數,第三個用STRUCT作為參數。由於第三個Overloads用了STRUCT作為參數或者返回值,因此要求必須對UDF Class添加@Resolve注解,指定STRUCT的具體類型。

1.代碼編寫

2.打jar包添加資源

3.創建函數

4.使用UDF函數

三、使用Hive的GenericUDF

這里我們使用Struct復雜數據類型作為示例,主要處理的邏輯是當我們結構體中兩個字段前后沒有差異時不返回,如果前后有差異將新的字段及其值組成新的結構體返回。示例中Struct的Field為3個。使用GenericUDF方式可以解決需要手動添加@Resolve注解。

1.創建一個MaxCompute表

2.表中數據結構如下

查詢數據如下所示:

3.編寫GenericUDF處理邏輯

(1)QSC_DEMOO類

(2)PubSimpleStruct類

3、打jar包,添加資源

4、創建函數

5、測試使用UDF函數

查詢結果如下所示:

注意:
(1)在使用兼容的Hive UDF的時候,需要在SQL前加set odps.sql.hive.compatible=true;語句,set語句和SQL語句一起提交執行。

(2)目前支持兼容的Hive版本為2.1.0,對應Hadoop版本為2.7.2。如果UDF是在其他版本的Hive/Hadoop開發的,則可能需要使用此Hive/Hadoop版本重新編譯。

 

本文作者:劉-建偉 

原文鏈接

本文為阿里雲內容,未經允許不得轉載。


免責聲明!

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



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