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