【问题标题】:Spark SQL similar to LISTAGG() within group OR GROUP_CONCATSpark SQL 类似于组内的 LISTAGG() 或 GROUP_CONCAT
【发布时间】:2022-12-14 11:08:13
【问题描述】:

我需要在组内实现一个类似于 redshift listagg() 的函数(按 x_column 排序),但在 Spark SQL 中很重要,这里是 https://spark.apache.org/docs/2.4.0/api/sql/

this 类似的问题,但答案不是没有 SQL。

我对 Redshift SQL 的查询是:

select KEY,
listagg(CODE, '-') within group (order by DATE) as CODE
from demo_table
group by KEY

此时 order by 语句并不重要,仅将所有列与 group by 聚合就足够了,我已经尝试使用 concat_ws 但它没有按预期工作

将它放在 pyspark 上对我不起作用

KEY CODE DATE
66 PL 11/1/2016
66 PL 12/1/2016
67 JL 12/1/2016
67 JL 10/1/2016
67 PL 9/1/2016
67 PO 8/1/2016
67 JL 12/1/2016
68 PL 11/1/2016
68 JO 11/1/2016

期望的输出

KEY CODE
68 JO - PL
67 JL - JL - PL - PO - JL
68 PL - JO

【问题讨论】:

标签: sql apache-spark apache-spark-sql


【解决方案1】:

array_joincollect_list

select 
 key, 
 array_join( -- concat the array
  collect_list(code), -- aggregate that collects the array of [code]
  ' - ' -- delimiter 
 )
from demo_table
group by KEY

【讨论】:

    【解决方案2】:

    下面的查询将起作用。它还包括订购方式。请检查。

    spark.sql("""select key,max(code) from ( select key,array_join(collect_list(code) over (partition by key order by to_date(date,'m/d/yyyy')),'-')视图中的代码)按键“””)显示(100)

    【讨论】:

      猜你喜欢
      • 2018-12-15
      • 2021-03-05
      • 2013-03-31
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多