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

标签 scala apache-spark dataframe apache-spark-sql

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

+---+---+
| a1+ a2|
+---+---+
|foo|bar|
|N/A|baz|
+---+---+

我期望:

val df2 = df.withColumn("a1", when($"a1" == "N/A", $"a2))

df2 看起来像:

+---+---+
| a1+ a2|
+---+---+
|foo|bar|
|baz|baz|
+---+---+

但我得到:

error: type mismatch;
 found   : Boolean
 required: org.apache.spark.sql.Column

所以听起来我需要一个 Column 方法来在 DataFrame 的 withColumn 方法中产生它的值。

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

最佳答案

你需要 === 而不是 ==:

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|
+---+---+

关于scala - 在 DataFrame.withColumn 中,如何使用列的值作为第二个参数的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43810377/

相关文章:

hadoop - 我们如何将 HadoopRDD 结果转换为 Parquet 格式?

python - pandas 数据框中不重叠的滚动窗口

Scala 集 : + vs.++

scala - 当类依赖于隐式时,是否有一种惯用的方法将类转换为对象?

apache-spark - spark 2.1 中的 createTempview 和 createGlobaltempview 以及 CreateorReplaceTempview 之间的区别?

python - 如何更改 python 3 pandas.DataFrame 的表形式?

python - 有没有办法获得多条曲线与另一条曲线的所有交点?

arrays - 寻找一种分割数组的好方法

java - 需要可靠/持久的出站套接字,选项?

scala - 卡夫卡消费者尝试使用Spark处理消息时多次消费消息