scala - 如何在 DataFrame 中用空值替换数字?

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

这可能很奇怪,但我想知道如何使用将整个DataFrameColumn替换为null >Scala.

假设我有一个名为 col 的可以为 null 的 DoubleType 列。在那里,我想用 null 替换所有不同于 (1.0 ~ 10.0) 的数字。

我尝试了下一个代码,但效果不佳。

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

但是,正如您在 Scala 中意识到的那样,当您将 null 转换为 Double 时,它会表示为 0.0 code>,这不是我想要的。此外,我无法意识到有任何方法可以使用一系列值来做到这一点。所以我就想有没有什么办法可以达到这个目的?

最佳答案

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 - 如何在 DataFrame 中用空值替换数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35587234/

相关文章:

scala - 从 sbt 运行 spark-shell

Python:使用 np.where 维护多列

python - 有没有办法在python中将字典作为pandas Dataframe的条目?

java - 用于编写 Tensorflow TFRecords 数据文件的纯 Java/Scala 代码

java - 将 jars 添加到 Spark 作业 - spark-submit

scala - 我可以限制 Scala 中数组的大小吗?

r - 基于列值在 R 中编号

scala - 实现scala中function的实现

scala - Spark : java. io.NotSerializableException : org. apache.avro.Schema$RecordSchema

scala - Spark Scala Jaas 配置