为什么在Spark Dataset中将null转换为-1.0

时间:2018-10-12 08:40:02

标签: scala apache-spark

我有以下数据框:

val df = Seq(
  ("a",Some(1.0)),
  ("b",None),
  ("c",Some(3.0))
).toDF("id","x")

df.show()

+---+----+
| id|   x|
+---+----+
|  a| 1.0|
|  b|null|
|  c| 3.0|
+---+----+

然后我做

df.as[(String,Double)]
.collect
.foreach(println)

(a,1.0)
(b,-1.0) <-- why??
(c,3.0)

因此null转换为-1.0,为什么呢?我希望它将映射到0.0。有趣的是,如果我这样做的话,确实如此:

df
.select($"x")
.as[Double]
.collect
.foreach(println)

1.0
0.0
3.0

我知道在我的情况下,映射到Option[Double]java.lang.Double是可行的方法,但是我仍然想了解火花对非空类型(例如{{ 1}}。

顺便说一下,我正在使用Spark 2.1.1和Scala 2.10.6

0 个答案:

没有答案