TypeError: withColumn() takes exactly 3 arguments (2 given)

TypeError: withColumn() takes exactly 3 arguments (2 given)

我正在尝试在 Databricks 中创建 2 列,这是减去 2 列的值并添加这 2 列的值的结果。

这是我输入的代码。

dfPrep = dfCleanYear.withColumn(df.withColumn("NuevaCol", df["AverageTemperature"] - df["AverageTemperatureUncertainty"])).withColumn(df.withColumn("NuevaCol", df["AverageTemperature"] + df["AverageTemperatureUncertainty"]))
dfPrep.show()

这就是错误。

类型错误:withColumn() 恰好接受 3 个参数(给定 2 个)

你知道缺少哪个参数吗?

谢谢

不清楚您使用的是哪个 Spark version/flavour。但是 DataBricks 文档通常对此很清楚,.withColumn 调用中的第一个参数应该是 DataFrame。

示例:https://docs.azuredatabricks.net/spark/1.6/sparkr/functions/withColumn.html

Syntax:

withColumn(df, “newColName”, colExpr)

Parameters:

df: Any SparkR DataFrame

newColName: String, name of new column to be added

colExpr: Column Expression

我们可以重写您的代码:

a = df.withColumn("NuevaCol", df["AverageTemperature"] - df["AverageTemperatureUncertainty"]) 
b = df.withColumn("NuevaCol", df["AverageTemperature"] + df["AverageTemperatureUncertainty"])
dfPrep = dfCleanYear.withColumn(a).withColumn(b)

前两行没问题。错误来自第三个。此行有两个问题:

  • withColumn语法应该是dataframe.withColumn("New_col_name", expression),这里括号里只有一个参数
  • 你在这里想要的是从一个数据帧 df 中取出一列并添加到另一个数据帧 dfCleanYear。所以,你应该使用 join,而不是 withColumn

点赞(未测试):

df = df.withColumn("NuevaCol_A", df["AverageTemperature"] - df["AverageTemperatureUncertainty"]) 
df = df.withColumn("NuevaCol_B", df["AverageTemperature"] + df["AverageTemperatureUncertainty"])
dfPrep = dfCleanYear.join(df, "KEY")