Spark / Scala:String字段可以为空,但Double字段不可为空

时间:2018-02-04 06:38:56

标签: scala apache-spark

我正在尝试使用案例类

从RDD创建DataFrame

我观察到字符串字段显示为可空,双字段不可为空。

请帮助我理解这种行为

PS:我知道可以通过将字段声明为Option[Double]来使该字段为空,但我希望理解为什么会发生这种情况?

scala> case class Airport(uuid:String, timestamp:String, iata:String, airport:String, city:String, state:String, country:String, lat:Double, long:Double)

scala> val ap_df = ap_nohdr.map(r => Airport(r(0).trim, r(1).trim, r(2).trim, r(3).trim, r(4).trim, r(5).trim, r(6).trim, r(7).trim.toDouble, r(8).trim.toDouble)).toDF();

scala> ap_df.printSchema
root
 |-- uuid: string (nullable = true)
 |-- timestamp: string (nullable = true)
 |-- iata: string (nullable = true)
 |-- airport: string (nullable = true)
 |-- city: string (nullable = true)
 |-- state: string (nullable = true)
 |-- country: string (nullable = true)
 |-- lat: double (nullable = false)
 |-- long: double (nullable = false)

1 个答案:

答案 0 :(得分:1)

Scala String与Java中的一样,是一个对象。它可以被取消。

Scala Double是Java原语double的别名。与java.lang.Double(您欢迎在案例类中使用)相比,它不是可以为空的对象

你也可以参考Null对象的Scala文档的这一部分,它也适用于双打

  

由于Null不是值类型的子类型,因此null不是任何此类型的成员。例如,无法将null赋给scala.Int类型的变量。

正如您所发现的,Option类是指示"可空原语"

scala: assign null to primitive