作者:2012张小雷_812 | 来源:互联网 | 2023-05-18 17:07
今天用sparksql的时候碰到了一个需求:根据id进行聚合,如果遇到数组,那么就取数组的并集,一开始我寻思i应该挺简单的,但是紧接着就碰到了问题:数组聚合用什么函数我在spark
今天用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中使用!!!
未经本人同意 禁止转载