我想在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
错误。
答案 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|
// +----+----+