pyspark SQL,用于根据ID、日期(升序)顺序将多行生成为一行的遍历

yvgpqqbh  于 2022-11-01  发布在  Spark
关注(0)|答案(2)|浏览(150)

任何人都可以请建议Spark-SQL查询,用于通过考虑column 1的唯一值,将基于column 1,date(升序)的多行合并为一行。以下是数据
这是一个登记表,其中的数据如下:

  1. column1 column2 timeStamp
  2. abc enrolled 2022/09/01
  3. abc changed 2022/09/02
  4. abc registered 2022/09/04
  5. abc blocked 2022/09/05
  6. abc left 2022/09/06
  7. def enrolled 2022/09/20
  8. def changed 2022/09/21
  9. def changed 2022/09/21
  10. def changed 2022/09/24
  11. def left 2022/09/25
  12. ghi registered 2022/09/01
  13. ghi changed 2022/09/02
  14. ghi left 2022/09/03
  15. ghi returned 2022/10/03

需要如下所示的查询输出:

  1. out_column1 out_column2
  2. abc enrolled-changed-registered-blocked-left
  3. def enrolled-changed-changed-left
  4. ghi registered-changed-left-returned

group_concat函数在pySpark中不可用

0ejtzxu1

0ejtzxu11#

  1. select column1 as out_column1
  2. ,group_concat(column2 order by timeStamp separator '-') as out_column2
  3. from t
  4. group by column1

| 输出列1|输出列2|
| - -|- -|
| abc公司|已登记-已更改-已注册-已阻止-左|
| 延迟|已登记-已更改-已更改-已更改-已离开|
| 吉|寄存-更改-左返回|
Fiddle

a2mppw5e

a2mppw5e2#

  1. select
  2. column1 as out_column1,
  3. group_concat(column2 order by timestamp separator '-') as out_column2
  4. from [table_name]
  5. group by 1
  • 我相信组concat将对与column1值关联的所有字符串进行分组
  • order by子句将根据日期对字符串进行排序,您可以根据自己的喜好对其进行更改(默认为ASC)
  • 分隔符将确保在每个串联字符串之间有-

相关问题