我正在尝试使用案例类
从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)
答案 0 :(得分:1)
Scala String
与Java中的一样,是一个对象。它可以被取消。
Scala Double
是Java原语double
的别名。与java.lang.Double
(您欢迎在案例类中使用)相比,它不是可以为空的对象
你也可以参考Null对象的Scala文档的这一部分,它也适用于双打
由于Null不是值类型的子类型,因此null不是任何此类型的成员。例如,无法将null赋给scala.Int类型的变量。
正如您所发现的,Option类是指示"可空原语"