Spark sql實現數組取並集操作


今天用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中使用!!!

 

未經本人同意  禁止轉載


免責聲明!

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



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