微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

 

未经本人同意  禁止转载

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐