如何用 DataFrame 中的空值替换数字?
How can I replace numbers by nulls in a DataFrame?
这可能很奇怪,但我想知道如何使用 Scala
.[=22 将 DataFrame
的 Column
替换为 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
这可能很奇怪,但我想知道如何使用 Scala
.[=22 将 DataFrame
的 Column
替换为 null
的任意数量=]
假设我有一个名为 col
的可为空的 DoubleType
列。在那里,我想用 null
.
我尝试了下一个代码,但不满意。
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