在DataFrame.withColumn中,如何使用列的值作为第二个参数的条件?

yoe*_*oel 1 scala dataframe apache-spark apache-spark-sql

如果我有一个名为df的DataFrame看起来像:

+---+---+
| a1+ a2|
+---+---+
|foo|bar|
|N/A|baz|
+---+---+
Run Code Online (Sandbox Code Playgroud)

我期望从:

val df2 = df.withColumn("a1", when($"a1" == "N/A", $"a2))
Run Code Online (Sandbox Code Playgroud)

df2看起来像:

+---+---+
| a1+ a2|
+---+---+
|foo|bar|
|baz|baz|
+---+---+
Run Code Online (Sandbox Code Playgroud)

但是我得到了:

error: type mismatch;
 found   : Boolean
 required: org.apache.spark.sql.Column
Run Code Online (Sandbox Code Playgroud)

因此,听起来我需要一个在DataFrame的withColumn方法中产生其值的Column方法。

有任何类似的事情,或者其他方法来用当前列的值有条件地填充withColumn的替换参数吗?

Psi*_*dom 6

您需要===代替==

val df2 = df.withColumn("a1", when($"a1" === "N/A", $"a2").otherwise($"a1"))
// df2: org.apache.spark.sql.DataFrame = [a1: string, a2: string]

df2.show
+---+---+
| a1| a2|
+---+---+
|foo|bar|
|baz|baz|
+---+---+
Run Code Online (Sandbox Code Playgroud)