Scala-用另一列填充“空”列

时间:2019-01-17 19:53:57

标签: scala dataframe apache-spark-sql

我想在Scala DataFrames中复制problem mentioned here。我尝试使用以下方法,但到目前为止没有成功。

输入

Col1  Col2
A       M
B       K
null    S

预期产量

Col1  Col2
A       M
B       K
S <---- S

方法1

val output = df.na.fill("A", Seq("col1"))

fill方法不将列作为(第一个)输入。

方法2

val output = df.where(df.col("col1").isNull)

识别出空值之后,我找不到合适的方法来调用。

方法3

val output = df.dtypes.map(column =>
  column._2 match {
    case "null" => (column._2 -> 0)
  }).toMap

我遇到StringType错误。

1 个答案:

答案 0 :(得分:2)

我将使用when/otherwise,如下所示:

import spark.implicits._
import org.apache.spark.sql.functions._

val df = Seq(
  ("A", "M"), ("B", "K"), (null, "S")
).toDF("Col1", "Col2")

df.withColumn("Col1", when($"Col1".isNull, $"Col2").otherwise($"Col1")).show
// +----+----+
// |Col1|Col2|
// +----+----+
// |   A|   M|
// |   B|   K|
// |   S|   S|
// +----+----+