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

Spark SQL如何对逗号分隔字符串去重及类型不匹配报错解决

报错根因

调用SPLIT函数拆分字符串后,每行返回的是array<string>类型的结果,直接对该结果执行collect_set会生成嵌套数组(array<array<string>>类型),而concat_ws仅支持传入一维数组或者字符串类型作为参数,因此触发类型不匹配报错。

解决方案

根据使用场景选择对应写法:

场景1:仅对每行内部的PointNameArray字段单独去重(无需跨行聚合)

Spark 2.4及以上版本可直接用数组函数单行处理,性能更高:

SELECT
    ItemId,
    Date,
    concat_ws(', ', array_distinct(transform(split(PointNameArray, ','), x -> trim(x)))) AS VarN
FROM dataset

代码中新增trim处理是为了避免拆分后元素前后带空格,导致apple和 apple被识别为不同值的问题。

场景2:按ItemId、Date分组,将同组所有行的PointNameArray元素合并后整体去重

先通过explode将拆分后的数组炸开展平为单个元素,再分组聚合去重:

SELECT 
    ItemId, 
    Date, 
    concat_ws(', ', collect_set(item)) AS VarN
FROM (
    SELECT 
        ItemId, 
        Date, 
        trim(explode(split(PointNameArray, ','))) AS item
    FROM dataset
) t
GROUP BY ItemId, Date

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:24:04