繁体   English   中英

如何使用 SQL 或 spark SQL 在多个列上聚合

[英]How to aggregate on multiple columns using SQL or spark SQL

我有下表:

Id col1 col2
1  a    1   
1  b    2   
1  c    3   
2  a    1   
2  e    3   
2  f    4  

预期的 output 是:

Id col3
1  a1b2c3
2  a1e3f4

聚合计算涉及2列,SQL是否支持?

在 Spark SQL 中,您可以这样做:

SELECT Id, aggregate(list, '', (acc, x) -> concat(acc, x)) col3
FROM (SELECT Id, array_sort(collect_list(concat(col1, col2))) list
      FROM df
      GROUP BY Id )

或在一个 select 中:

SELECT Id, aggregate(array_sort(collect_list(concat(col1, col2))), '', (acc, x) -> concat(acc, x)) col3
FROM df
GROUP BY Id

本例使用高阶aggregate function。

aggregate(expr, start, merge, finish) - 将二元运算符应用于初始 state 和数组中的所有元素,并将其减少为单个 state。 通过应用完成 function 将最终 state 转换为最终结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM