如何用 DataFrame 中的空值替换数字?

How can I replace numbers by nulls in a DataFrame?

这可能很奇怪,但我想知道如何使用 Scala.[=22 将 DataFrameColumn 替换为 null 的任意数量=]

假设我有一个名为 col 的可为空的 DoubleType 列。在那里,我想用 null.

替换所有不同于 (1.0 ~ 10.0) 的数字

我尝试了下一个代码,但不满意。

val xf = df.na.replace("col", Map(0.0 -> null.asInstanceOf[Double]).toMap)

但是,正如您在 Scala 中意识到的那样,当您将 null 转换为 Double 时,它会变成 0.0,这不是我想要的.此外,我无法用一系列值来实现它。因此,我在想有没有什么办法可以做到这一点?

when 子句怎么样?

import org.apache.spark.sql.functions.when

val df = sc.parallelize(
  (1L, 0.0) :: (2L, 3.6) :: (3L, 12.0) :: (4L, 5.0) ::  Nil
).toDF("id", "val")

df.withColumn("val", when($"val".between(1.0, 10.0), $"val")).show

// +---+----+
// | id| val|
// +---+----+
// |  1|null|
// |  2| 3.6|
// |  3|null|
// |  4| 5.0|
// +---+----+

任何不满足谓词(此处为 val BETWEEN 1.0 AND 10.0)的值将被替换为 NULL

另见 Create new Dataframe with empty/null field values