在Spark中空检查Double / Int Value

时间:2016-09-13 10:22:28

标签: scala hadoop apache-spark hive

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

喜欢String我们可以这样做:

val value = (FirstString.isEmpty()) match {
          case true => SecondString
          case _    => FirstString
        }

我搜索了很多,但我发现只有String值。你能否建议我使用其他数据类型。

提前致谢。

3 个答案:

答案 0 :(得分:4)

可能只需使用Option即可。所以喜欢:

val d: Double = ...

val isNull = Option(d).isDefined

或者您可以使用模式匹配:

val d: Double = ...

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

答案 1 :(得分:4)

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

例如:

// the below are AnyVal(s) and wont compile
val c: Char = null
val i: Int = null
val d: Double = null  

String是AnyRef,因此可以为null:

// this is ok!
val c: String = null 

这就是为什么模式匹配空值到Int / Double类型是不可能的:

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

答案 2 :(得分:3)

isEmpty与&#34完全相同;检查为空"。在isEmpty上拨打null将失败:

val s: String = null
s.isEmpty // throws NullPointerException

IntDouble不能为空(任何其他原始类型都不能),因此无需检查它们是否为空。如果您专门讨论Spark Row,则需要在获取Int / Double /其他原始值之前检查null

  

It is invalid to use the native primitive interface to retrieve a value that is null, instead a user must check isNullAt before attempting to retrieve a value that might be null.