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

PySpark使用when、endsWith与regexp_replace时报'Column' object not callable

报错原因

  • 变量名传错:你定义的源数据列表变量名为address,但spark.createDataFrame的第一个参数写的是不存在的name变量。
  • 依赖函数未导入:代码只导入了regexp_extract,但实际用到的regexp_replace函数没有提前导入,这是触发'Column' object is not callable报错的核心原因。
  • 额外说明:PySpark Python API不支持$"address"这种Scala风格的列引用写法,用col("address")或df.address都是正确的,你之前的列引用写法没有问题。

修正后可运行代码

from pyspark.sql import SparkSession
from pyspark.sql.functions import when, col, regexp_replace

# 若你的环境已预定义spark变量,可省略初始化步骤
spark = SparkSession.builder.appName("address_replace").getOrCreate()

address = [(1,"14851 Jeffrey Rd","DE"),(2,"43421 Margarita St","NY"),(3,"13111 Siemon Ave","CA"),(4,"110 South Ave","FL")]
# 修正第一个参数为正确的变量名address
df = spark.createDataFrame(address, ["id","address","state"])

df.withColumn("address",
    # 正则加$符号匹配末尾缩写,避免地址中间出现缩写时误替换
    when(col("address").endsWith("Rd"), regexp_replace(col("address"), r"Rd$", "Road"))
    .when(col("address").endsWith("St"), regexp_replace(col("address"), r"St$", "Street"))
    .when(col("address").endsWith("Ave"), regexp_replace(col("address"), r"Ave$", "Avenue"))
    .otherwise(col("address")) # 传列对象而非字符串,避免未匹配的地址被覆盖为固定字符串
).show(truncate=False)

运行输出

+---+----------------------+-----+
|id |address               |state|
+---+----------------------+-----+
|1  |14851 Jeffrey Road    |DE   |
|2  |43421 Margarita Street|NY   |
|3  |13111 Siemon Avenue   |CA   |
|4  |110 South Avenue      |FL   |
+---+----------------------+-----+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:36:04