Databricks中withColumn报错:TypeError需3个参数却传入2个
解决Databricks中withColumn的TypeError问题
这个错误其实很常见,是因为你对withColumn的调用方式理解错啦~
错误原因分析
报错TypeError: withColumn() takes exactly 3 arguments (2 given)的本质是:你错误地把整个df.withColumn(...)的结果作为参数传给了另一个withColumn,而没有遵循withColumn的正确参数要求。
withColumn的正确签名是:
DataFrame.withColumn(colName, col)
它需要两个参数:
- 第一个是字符串类型的新列名称
- 第二个是新列的计算表达式(比如两列的加减运算)
你的代码里把df.withColumn("NuevaCol", ...)当作参数传给外层的withColumn,相当于只传了一个参数给外层的withColumn,自然会触发参数数量错误。
修正后的代码
这里给你两种正确的写法:
写法1:直接引用DataFrame的列
# 注意每个withColumn独立传入列名和计算表达式 dfPrep = dfCleanYear.withColumn("TempDifference", dfCleanYear["AverageTemperature"] - dfCleanYear["AverageTemperatureUncertainty"]) \ .withColumn("TempSum", dfCleanYear["AverageTemperature"] + dfCleanYear["AverageTemperatureUncertainty"]) dfPrep.show()
写法2:使用col函数更简洁
from pyspark.sql.functions import col dfPrep = dfCleanYear.withColumn("TempDifference", col("AverageTemperature") - col("AverageTemperatureUncertainty")) \ .withColumn("TempSum", col("AverageTemperature") + col("AverageTemperatureUncertainty")) dfPrep.show()
额外提示
- 链式调用时可以用反斜杠
\换行,让代码结构更清晰,避免一行过长 - 给新列起有意义的名字(比如
TempDifference、TempSum),比NuevaCol更易读维护
内容的提问来源于stack exchange,提问作者Rod81
相关产品推荐
相关产品推荐

