You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake Snowpark Python:分组拼接字段问题求助

问题描述

在Snowflake中有如下数据表:

id_requestalert_code
100R70
100R69
100R54
101R24
101R93

需要将其转换为以下格式:

id_requestalert_all
100R70,R69,R54
101R24,R93

尝试了以下PySpark代码但运行出错:

df_alerts_3 = df_alerts_2.groupBy('id_request')\
.agg(concat_ws(lit(','), array_agg('alert_code')).alias('alert_all'))
解决方案

PySpark代码修正

你的代码错误在于concat_ws的参数使用不当:concat_ws的第一个参数直接传入字符串分隔符即可,无需用lit()包裹;同时array_agg生成的数组可直接作为concat_ws的第二个参数。修正后的代码如下:

from pyspark.sql import functions as F

df_alerts_3 = df_alerts_2.groupBy('id_request')\
    .agg(F.concat_ws(',', F.array_agg('alert_code')).alias('alert_all'))

Snowflake原生SQL实现

如果直接使用Snowflake SQL完成该需求,推荐使用LISTAGG函数,这是Snowflake专门用于字符串聚合的函数,用法更简洁:

SELECT 
    id_request,
    LISTAGG(alert_code, ',') WITHIN GROUP (ORDER BY alert_code) AS alert_all
FROM your_table_name -- 替换为你的实际表名
GROUP BY id_request;

注:WITHIN GROUP (ORDER BY alert_code)用于指定聚合后的字符串排序规则,若不需要排序可省略该部分。

内容的提问来源于stack exchange,提问作者SnowUnicorn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:17:06