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

如何在Spark中将字符串列拆分为字符数组?

在PySpark中将字符串列拆分为单个字符的数组

嘿,这个需求其实用PySpark的内置函数就能轻松实现,不用写复杂的自定义函数(UDF)。我给你两种方案,分别适配不同的Spark版本,保证能得到你想要的结果。


方案1:适用于Spark 3.0+(简洁版)

直接使用split函数,传入空字符串作为分隔符,就能把字符串拆成单个字符的数组,连空格这类特殊字符也能完美保留。

完整代码如下:

from pyspark.sql import functions as F

# 初始化你的示例DataFrame
df = spark.createDataFrame([('Vilnius',), ('Riga',), ('Tallinn',), ('New York',)], ['col_cities'])

# 新增拆分后的数组列
df_result = df.withColumn('split', F.split(F.col('col_cities'), ''))

# 查看结果(truncate=False避免数组内容被截断)
df_result.show(truncate=False)

运行后得到的结果完全符合你的预期:

+----------+------------------------+
|col_cities|split |
+----------+------------------------+
|Vilnius |[V, i, l, n, i, u, s] |
|Riga |[R, i, g, a] |
|Tallinn |[T, a, l, l, i, n, n] |
|New York |[N, e, w, , Y, o, r, k]|
+----------+------------------------+


方案2:适用于Spark 2.x版本(兼容版)

如果你的Spark版本较低(2.x系列),直接传空字符串给split可能会报错,这时候可以用正则表达式的正向后顾断言来实现同样的效果:

from pyspark.sql import functions as F

df = spark.createDataFrame([('Vilnius',), ('Riga',), ('Tallinn',), ('New York',)], ['col_cities'])

# 使用正则断言拆分每个字符
df_result = df.withColumn('split', F.split(F.col('col_cities'), '(?<=.)'))

df_result.show(truncate=False)

这里的(?<=.)是一个正则表达式的正向后顾断言,它会匹配任意单个字符之后的位置,以此作为拆分点,最终同样能得到单个字符组成的数组,效果和方案1完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 23:32:43