Spark DataFrame中substr函数基于长度列生成新列报错排查
解决PySpark substr类型不匹配问题
错误原因
你遇到的TypeError是因为PySpark中列对象的substr方法要求两个参数都是字面量整数,而你第二个参数传入了F.col("Length")(Column类型),导致参数类型不一致。
解决方案
有两种可行的修复方式:
方式1:使用pyspark.sql.functions.substring函数
这个函数支持直接传入Column类型的参数,语法更灵活:
import pyspark.sql.functions as F df = df.withColumn("CityName", F.substring(df.Address, 1, F.col("Length")))
方式2:使用expr编写SQL风格表达式
通过SQL表达式直接引用列,避免类型不兼容问题:
import pyspark.sql.functions as F df = df.withColumn("CityName", F.expr("substring(Address, 1, Length)"))
两种方式都能实现从Address列的第1位开始,截取Length列指定长度的字符串,生成CityName新列,且不会再触发类型不匹配错误。
内容的提问来源于stack exchange,提问作者Pratik Asthana
相关产品推荐
相关产品推荐

