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

Spark Java拆分拼接字符串:使用selectExpr split函数遇异常表结构

解决Spark中使用selectExpr拆分拼接字符串的问题

看你的表结构,应该是想把用|分隔的genres列拆分成分类数组,但目前得到的genres1列变成了单个字符的数组——这大概率是因为|在正则表达式里属于特殊字符,直接用它作为split的分隔符会被当成“或”逻辑处理,所以才把每个字符都拆出来了。

下面给你两种靠谱的解决方法,都是用selectExpr实现的:

方法一:转义特殊分隔符

因为split函数的第二个参数是正则表达式,所以需要把|转义成\\|(Spark字符串里要做双转义处理):

// Scala 示例
df.selectExpr("genres", "split(genres, '\\\\|') as split_genres").show()
# Python 示例
df.selectExpr("genres", "split(genres, '\\\\|') as split_genres").show()

这样就能把Adventure|Animation这类字符串拆成["Adventure", "Animation"]的正常数组了。

方法二:用字符类包裹分隔符

另一种更简洁的方式是把|放到正则字符类[]里,这样它就会被当作普通字符识别,不用额外转义:

df.selectExpr("genres", "split(genres, '[|]') as split_genres").show()

额外优化:处理多余分隔符

如果你的genres列存在开头/结尾多余的|,可以结合trim函数先清理再拆分:

df.selectExpr("genres", "split(trim('|', genres), '\\\\|') as split_genres").show()

执行后你会得到符合预期的结果:

+-----------------------+-----------------------------+
| genres                | split_genres                |
+-----------------------+-----------------------------+
|Adventure|Animation    |[Adventure, Animation]       |
|Adventure|Children     |[Adventure, Children]        |
|Comedy|Drama|Romance   |[Comedy, Drama, Romance]     |
+-----------------------+-----------------------------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:05:14