Scala Spark中Double/Int值的空检查

Scala Spark中Double/Int值的空检查,scala,hadoop,apache-spark,hive,Scala,Hadoop,Apache Spark,Hive,我是个新手, 如何检查Double中的Null值和scala或Spark中的Int值 对于字符串,我们可以这样做: val value = (FirstString.isEmpty()) match { case true => SecondString case _ => FirstString } 我搜索了很多,但只找到了字符串值。你能给我推荐其他的数据类型吗 提前感谢。可能您只需使用选项即可。就像: val d:

我是个新手, 如何检查Double中的Null值和scala或Spark中的Int值

对于字符串,我们可以这样做:

val value = (FirstString.isEmpty()) match {
          case true => SecondString
          case _    => FirstString
        }
我搜索了很多,但只找到了字符串值。你能给我推荐其他的数据类型吗

提前感谢。

可能您只需使用选项即可。就像:

val d: Double = ...

val isNull = Option(d).isDefined
也可以使用模式匹配:

val d: Double = ...

Option(d) match {
  case Some(v) => use v
  case _ => you got Null
}
也许你可以简单地使用选项。就像:

val d: Double = ...

val isNull = Option(d).isDefined
也可以使用模式匹配:

val d: Double = ...

Option(d) match {
  case Some(v) => use v
  case _ => you got Null
}

null仅适用于AnyRef,即Scala中的非基元类型。AnyVal类型不能设置为null

例如:

// the below are AnyVal(s) and wont compile
val c: Char = null
val i: Int = null
val d: Double = null  
字符串是AnyRef,因此可以为null:

// this is ok!
val c: String = null 
这就是为什么不可能将null与Int/Double类型进行模式匹配:

// wont compile!
null match {
        case a:Int => "is a null Int"
        case _ => "something else"
        }

null仅适用于AnyRef,即Scala中的非基元类型。AnyVal类型不能设置为null

例如:

// the below are AnyVal(s) and wont compile
val c: Char = null
val i: Int = null
val d: Double = null  
字符串是AnyRef,因此可以为null:

// this is ok!
val c: String = null 
这就是为什么不可能将null与Int/Double类型进行模式匹配:

// wont compile!
null match {
        case a:Int => "is a null Int"
        case _ => "something else"
        }
isEmpty与检查null完全不同。在null上调用isEmpty将失败:

val s: String = null
s.isEmpty // throws NullPointerException
Int和Double不能为null,任何其他基元类型也不能为null,因此不需要检查它们是否为null。如果您专门讨论Spark行,则需要在获取Int/Double/other原语值之前检查null:

isEmpty与检查null完全不同。在null上调用isEmpty将失败:

val s: String = null
s.isEmpty // throws NullPointerException
Int和Double不能为null,任何其他基元类型也不能为null,因此不需要检查它们是否为null。如果您专门讨论Spark行,则需要在获取Int/Double/other原语值之前检查null:


这是毫无意义的:因为Double不能为null,Optiond总是一些。如果代码在。。。实际上不会计算为Double,而是计算为java.lang.Double,该值可以为null,然后您将在该行上得到一个异常。使用Try{}代替这是毫无意义的:因为Double不能为null,Optiond将始终是一些。如果代码在。。。实际上不会计算为Double,而是计算为java.lang.Double,该值可以为null,然后您将在该行中得到一个异常