【发布时间】:2017-10-06 06:19:52
【问题描述】:
我有一个包含许多双(和/或浮点)列的数据框,其中包含 NaN。我想用 null 替换所有 NaN(即 Float.NaN 和 Double.NaN)。
我可以做到这一点,例如对于单个列x:
val newDf = df.withColumn("x", when($"x".isNaN,lit(null)).otherwise($"x"))
这可行,但我想一次对所有列执行此操作。我最近发现了DataFrameNAFunctions (df.na) fill,这听起来正是我需要的。不幸的是,我没有做到以上。 fill 应该用给定值替换所有 NaN 和 null,所以我这样做:
df.na.fill(null.asInstanceOf[java.lang.Double]).show
这给了我一个NullpointerException
还有一个很有前途的replace方法,但是我连代码都编译不了:
df.na.replace("x", Map(java.lang.Double.NaN -> null.asInstanceOf[java.lang.Double])).show
奇怪的是,这给了我
Error:(57, 34) type mismatch;
found : scala.collection.immutable.Map[scala.Double,java.lang.Double]
required: Map[Any,Any]
Note: Double <: Any, but trait Map is invariant in type A.
You may wish to investigate a wildcard type such as `_ <: Any`. (SLS 3.2.10)
df.na.replace("x", Map(java.lang.Double.NaN -> null.asInstanceOf[java.lang.Double])).show
【问题讨论】:
标签: scala apache-spark spark-dataframe