我有以下数据框:
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