我是Spark的新手, 如何在scala或Spark中检查Double和Int值中的Null值。
喜欢String我们可以这样做:
val value = (FirstString.isEmpty()) match {
case true => SecondString
case _ => FirstString
}
我搜索了很多,但我发现只有String值。你能否建议我使用其他数据类型。
提前致谢。
答案 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
Int
和Double
不能为空(任何其他原始类型都不能),因此无需检查它们是否为空。如果您专门讨论Spark Row
,则需要在获取Int
/ Double
/其他原始值之前检查null :