У меня есть следующий Dataframe:
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)
Итак, ноль преобразуется в -1.0, почему это так?Я ожидал, что он будет сопоставлен с 0.0.Интересно, что это действительно так, если я это сделаю:
df
.select($"x")
.as[Double]
.collect
.foreach(println)
1.0
0.0
3.0
Я знаю, что в моем случае отображение на Option[Double]
или java.lang.Double
- это путь, но я все равно был бы заинтересован в пониманиичто делает искра с ненулевыми типами, такими как Double
.
Кстати, я использую Spark 2.1.1 с Scala 2.10.6