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

将PySpark DataFrame中字符串类型的列表列转为数组类型

解决PySpark中带空格元素的字符串数组转ArrayType问题

你的问题出在正则表达式的选择上:\w+仅匹配字母、数字和下划线,不包含空格,所以会把"clark kent"这类带空格的元素拆成两个独立元素。下面是两种可行的解决方案:

方法1:字符串替换+分割(更直观)

先移除字符串首尾的[],再按, (逗号加空格)分割成数组:

from pyspark.sql.functions import expr

df_out = df.withColumn(
    "column2",
    expr("split(regexp_replace(column2, '^\\[|\\]$', ''), ', ')")
)
  • regexp_replace(column2, '^\\[|\\]$', ''):去掉字符串开头的[和结尾的]
  • split(..., ', '):用, 作为分隔符拆分处理后的字符串,完整保留带空格的元素

方法2:使用正确的正则表达式提取

如果想用regexp_extract_all,需要匹配逗号分隔、包含空格的完整元素,正则规则如下:

from pyspark.sql.functions import expr

df_out = df.withColumn(
    "column2",
    expr(r"regexp_extract_all(column2, '(?<=\\[|, )[^,]+?(?=, |\\])', 0)")
)
  • (?<=\\[|, ):正向断言,匹配[或者, 之后的起始位置
  • [^,]+?:非贪婪匹配任意非逗号的字符(包含空格)
  • (?=, |\\]):正向断言,匹配, 或者]之前的结束位置

执行任意一种方法后,得到的结果都会符合你的预期:

column1column2
1111["clark kent", "john", "silvie"]
2222["bob", "charles", "seth rog"]
3333["jane", "luke max", "adam"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:05:31