UDF函數中定義的集合對象何時初始化
udf函數放在sql中對某個字段進行處理,那么在底層會創建一個該類的對象,這個對象不斷的去調用這個evaluate(...)方法,截圖如下:

1.1 如果說對於每一條傳入UDF中需要處理的數據都需要全新的集合對象,那么這個時候集合對象就需要在類中聲明,在evaluate(...)中進行初始化,這樣就保證了對於傳入UDF函數的每一條待處理數據,對應的集合對象都是全新的。截圖如下:



以下是對應的函數返回的結果(這是我想要的結果,之前是下面1.2截圖所示的結果),可以看出傳入的數據(source)不同,函數處理后的數據(result)也是不同的。

1.2 如果說對於每一條傳入UDF中需要處理的數據都需要結合之前的集合里的數據進行處理,那么這個時候集合對象就需要在類中聲明並初始化。截圖如下

以下是對應的函數返回的結果(這並不是我想要的結果),可以看出傳入的數據(source)不同,函數處理后的數據(result)居然是相同的,
這正是因為集合初始化放在了創建UDF對象的時候,那么這個UDF對象每次在調用evaluate這個方法對傳進來的source數據進行處理的時候需要的集合對象並不是全新的,集合中保留了之前數據的處理結果,那么也就對本次待處理數據造成了影響,最終導致返回的result數據並不是我們想要的結果。
