PySpark DataFrame拆分列报错:'Column'对象不可调用如何解决?
解决PySpark中split报错:'Column' object is not callable
问题原因
你写的是Pandas的字符串拆分语法,但df3实际是PySpark DataFrame。PySpark的Column对象没有.str.split()这种调用方式,因此触发TypeError。
解决方案
PySpark中需要使用pyspark.sql.functions提供的split函数来处理字符串拆分,且没有expand=True参数,需通过getItem()提取拆分后的各部分。
步骤1:导入必要函数
from pyspark.sql.functions import split, col, coalesce
步骤2:拆分并提取列
基础写法
先拆分生成临时列,再提取各部分:
# 按非数字字符(\D)拆分USER_FULL_NAME,生成临时列split_name df_split = df3.withColumn("split_name", split(col("USER_FULL_NAME"), r"\D")) # 提取拆分后的3个部分,分别命名为Title、FirstName、LastName df4 = df_split.select( "*", col("split_name").getItem(0).alias("Title"), col("split_name").getItem(1).alias("FirstName"), col("split_name").getItem(2).alias("LastName") ).drop("split_name")
简化写法(无需临时列)
df4 = df3.select( "*", split(col("USER_FULL_NAME"), r"\D").getItem(0).alias("Title"), split(col("USER_FULL_NAME"), r"\D").getItem(1).alias("FirstName"), split(col("USER_FULL_NAME"), r"\D").getItem(2).alias("LastName") )
处理拆分后元素不足的情况
如果部分行拆分后不足3个元素,会返回null,可以用coalesce设置默认值(比如空字符串):
df4 = df_split.select( "*", coalesce(col("split_name").getItem(0), "").alias("Title"), coalesce(col("split_name").getItem(1), "").alias("FirstName"), coalesce(col("split_name").getItem(2), "").alias("LastName") ).drop("split_name")
额外说明
如果你的df3确实是Pandas DataFrame,检查是否存在以下问题:
- 列名
USER_FULL_NAME是否拼写正确 - Pandas版本是否过低(确保支持
.str.split(expand=True))
内容的提问来源于stack exchange,提问作者bannu
相关产品推荐
相关产品推荐

