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

PySpark使用split按点分割字符串并拆分为多列的问题

问题根因

你的分割代码失效是两个参数传错导致的:

  • split 函数的分隔符参数遵循正则匹配规则,. 是正则中的特殊元字符,代表匹配任意单个字符,直接传入无法匹配实际的点号,需要转义为 \\. 才能匹配点号本身
  • 你传入的第三个参数limit值为1,该参数控制分割后返回的数组最大长度,设为1时只会返回包含完整原字符串的单元素数组,要全部分割可以不传该参数(默认值-1为全分割),如果固定要分3段可以传3。
正确实现代码

先导入pyspark函数模块,通过split分割后按数组索引提取对应列即可:

from pyspark.sql import functions as F

# 写法1:可读性更高的分步写法
df_with_split = df.withColumn("split_arr", F.split(F.col("col2"), "\\."))
result = df_with_split.select(
    "col1",
    F.col("split_arr")[0].alias("col2"),
    F.col("split_arr")[1].alias("col3"),
    F.col("split_arr")[2].alias("col4")
)

# 写法2:省略中间列的简洁写法
result = df.select(
    "col1",
    F.split(F.col("col2"), "\\.")[0].alias("col2"),
    F.split(F.col("col2"), "\\.")[1].alias("col3"),
    F.split(F.col("col2"), "\\.")[2].alias("col4")
)

执行result.show()即可得到你预期的输出:

+----+----+------------+----+
|col1|col2|        col3|col4|
+----+----+------------+----+
|   1| SN4|F01C04-AM428|1_31|
+----+----+------------+----+

注意:如果数据中存在col2包含点号数量不足2个的行,对应索引位置提取的值会为null,这类场景需要提前做数据校验或填充默认值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:42:28