如何从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
相关产品推荐
相关产品推荐

