今天用spark sql的時候碰到了一個需求:根據id進行聚合,如果遇到數組,那么就取數組的並集,一開始我尋思i應該挺簡單的 ,但是緊接着就碰到了問題:數組聚合用什么函數
我在spark sql官方提供的文檔里面是沒有找到類似的函數的,我第一個想法就是自己寫一個,很遺憾失敗了,可能因為我個人水平有限,代碼就不放出來了
接下來我想着能不能通過不同函數的拼接來實現類似的功能,但是翻遍了官方文檔也沒找到list的聚合函數,出了list_zip可惜他並不能滿足我的需求.
接下來我把目光瞄准了 spark3.0的aggregate函數,官網是這樣描述他的
但是很遺憾 也沒做出來 在merge階段不管是用sql的語法合並還是scala的語法總是會報錯 個人猜測是數據類型的問題
正當我一籌莫展的時候,我試着用concat連接數組
???竟然成了
接下來就是去重,這個好辦 spark sql有專門的函數array_distinct
接下來聚合 emmm 果然concat不屬於聚合函數 我有collect_list
但還是出錯了
collect_list雖然是聚合函數,但接下來寫出的時候時候
多了一個中括號是什么鬼
emmmm
我估計是把數組當程整個元素收集了 那有沒有其他的聚合函數 不會產生類似的情況呢???
我把目光瞄向了max 這貨好像可以 於是:
解決
hive單中不能使用 concat連接array 因此這個方法只能在spark sql中使用!!!
未經本人同意 禁止轉載