ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Spark sql实现数组取并集操作

2021-11-12 18:31:23  阅读:227  来源: 互联网

标签:聚合 函数 list 数组 sql Spark 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中使用!!!

 

未经本人同意  禁止转载

标签:聚合,函数,list,数组,sql,Spark,spark
来源: https://www.cnblogs.com/zxmingming/p/15545905.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有