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

如何从PySpark DataFrame中提取指定子字符串?

解决PySpark截取字符串从第二个字符到末尾的问题

要实现从name列去掉第一个字符生成substr列,你之前的尝试存在参数使用错误,以下是两种可行的解决方案:

方法1:使用SQL表达式(推荐,写法更简洁)

PySpark的SQL表达式中,substring函数支持仅传入起始位置(从1开始计数),自动截取到字符串末尾:

from pyspark.sql import functions as F

# 假设原DataFrame名为df
df = df.withColumn("substr", F.expr("substring(name, 2)"))

方法2:使用PySpark原生substring函数

原生substring需要传入列名、起始位置、截取长度三个参数,通过length函数计算截取长度(原字符串长度减1):

from pyspark.sql import functions as F

df = df.withColumn("substr", F.substring(F.col("name"), 2, F.length(F.col("name")) - 1))

你的错误尝试分析

  • F.substring(F.col('name'), 1):参数数量不足,原生substring必须传入3个参数
  • F.substring(F.col('name'), 1, None):第三个参数不能为None,需传入有效数值或Column对象
  • F.substring(F.col('name'), 1, F.length(F.col('name'))):起始位置设为1会从第一个字符开始截取,结果等于原字符串,不符合需求

运行上述任一方法后,即可得到预期的DataFrame:

name           substr
Shane          hane
Judith         udith
Rick Grimes    ick Grimes

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:40:43