collect_set 和collect_list说一下
时间: 2023-12-18 07:02:58 浏览: 135
`collect_set` 和 `collect_list` 都是 Spark SQL 中的聚合函数,用于将一个分组内的多个行合并成一个集合或列表。
- `collect_set` 会返回一个包含分组内所有不同值的无序集合(Set),即去重后的结果集合。
- `collect_list` 会返回一个包含分组内所有值的列表,值的顺序与原始表中的顺序保持一致。
例如,假设有一个表:
```
+-------+------+
| group | name |
+-------+------+
| A | Tom |
| A | Tom |
| A | Bob |
| B | Bob |
| B | Jack |
+-------+------+
```
如果我们按照 `group` 进行分组,并使用 `collect_set` 和 `collect_list` 聚合 `name` 列,则结果如下:
```
SELECT group, collect_set(name), collect_list(name) FROM table GROUP BY group;
+-------+-----------------------+---------------+
| group | collect_set(name) | collect_list(name) |
+-------+-----------------------+---------------+
| A | [Tom, Bob] | [Tom, Tom, Bob] |
| B | [Bob, Jack] | [Bob, Jack] |
+-------+-----------------------+---------------+
```
可以看到,`collect_set` 去重后的集合为 `[Tom, Bob]` 和 `[Bob, Jack]`,而 `collect_list` 返回的列表与原始表中的顺序保持一致。
阅读全文