collect_list 和 collect_set 有什么区别?
collect_list
和 collect_set
是 Hive 中用于聚合数据的两个常用函数,它们的主要区别在于是否去除重复值以及结果的顺序性。以下是它们的详细对比:1. 功能区别
-
collect_list
:-
功能:将指定列的所有值(包括重复值)收集到一个数组中。
-
特点:保留所有值,不进行去重,结果数组中的值按照原始数据的顺序排列。
-
-
collect_set
:-
功能:将指定列的值收集到一个数组中,并自动去除重复值。
-
特点:返回唯一值的集合,结果数组中的值顺序是不确定的。
-
2. 使用场景
-
collect_list
:-
适用于需要保留所有值(包括重复值)的场景。
-
例如,统计每个用户的所有订单详情,保留重复的订单记录。
-
-
collect_set
:-
适用于需要去除重复值的场景。
-
例如,统计每个用户购买过的不同产品。
-
3. 性能和注意事项
-
collect_list
:-
由于保留所有值,可能导致生成的数组较大,尤其在数据量大的情况下需要注意内存限制。
-
-
collect_set
:-
去除重复值后,生成的数组通常更小,但结果顺序不确定。
-
如果需要对结果排序,可以结合
sort_array
函数。
-
4. 示例
假设有一个表
orders
,包含以下列:-
customer_id
:客户ID -
product
:产品名称
数据如下:
customer_id | product |
---|---|
101 | iPhone |
101 | iPhone |
101 | MacBook Pro |
102 | iPad |
102 | iPad |
使用 collect_list
:
sql复制
SELECT customer_id, collect_list(product) AS products
FROM orders
GROUP BY customer_id;
结果:
customer_id | products |
---|---|
101 | ["iPhone", "iPhone", "MacBook Pro"] |
102 | ["iPad", "iPad"] |
使用 collect_set
:
sql复制
SELECT customer_id, collect_set(product) AS products
FROM orders
GROUP BY customer_id;
结果:
customer_id | products |
---|---|
101 | ["iPhone", "MacBook Pro"] |
102 | ["iPad"] |
总结
-
如果需要保留所有值(包括重复值),使用
collect_list
。 -
如果需要去除重复值,使用
collect_set
。 -
两者都返回数组类型,但
collect_set
的结果无序。
分类:
Hadoop&Spark
posted on 2025-02-25 19:43 ExplorerMan 阅读(43) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2021-02-25 redis面试题汇总
2021-02-25 消息队列面试题
2021-02-25 MongoDB面试题
2021-02-25 高并发系统限流-漏桶算法和令牌桶算法
2021-02-25 RedisCluster的rename机制失败报错,解决又是数据倾斜问题
2021-02-25 开发如何避免redis集群访问倾斜和数据倾斜
2021-02-25 Pika 连接 rabbitmq 集群