Hive_UDF函數中集合對象初始化的注意事項


UDF函數中定義的集合對象何時初始化

udf函數放在sql中對某個字段進行處理,那么在底層會創建一個該類的對象,這個對象不斷的去調用這個evaluate(...)方法,截圖如下:
 
1.1 如果說對於每一條傳入UDF中需要處理的數據都需要全新的集合對象,那么這個時候集合對象就需要在類中聲明,在evaluate(...)中進行初始化,這樣就保證了對於傳入UDF函數的每一條待處理數據,對應的集合對象都是全新的。截圖如下:
以下是對應的函數返回的結果(這是我想要的結果,之前是下面1.2截圖所示的結果),可以看出傳入的數據(source)不同,函數處理后的數據(result)也是不同的。
 
1.2 如果說對於每一條傳入UDF中需要處理的數據都需要結合之前的集合里的數據進行處理,那么這個時候集合對象就需要在類中聲明並初始化。截圖如下
以下是對應的函數返回的結果(這並不是我想要的結果),可以看出傳入的數據(source)不同,函數處理后的數據(result)居然是相同的,
    這正是因為集合初始化放在了創建UDF對象的時候,那么這個UDF對象每次在調用evaluate這個方法對傳進來的source數據進行處理的時候需要的集合對象並不是全新的,集合中保留了之前數據的處理結果,那么也就對本次待處理數據造成了影響,最終導致返回的result數據並不是我們想要的結果。
 


免責聲明!

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



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