我是spark的新手,如何检查double中的null值和scala或spark中的int值。对于字符串,我们可以这样做:
val value = (FirstString.isEmpty()) match { case true => SecondString case _ => FirstString }
我找了很多,但只找到了字符串值。你能给我推荐其他的数据类型吗。提前谢谢。
iecba09b1#
isEmpty 与“检查空值”完全不同。打电话 isEmpty 在 null 将失败:
isEmpty
null
val s: String = null s.isEmpty // throws NullPointerException ``` `Int` 以及 `Double` 不能为null(其他基元类型也不能为null),因此不需要检查它们是否为null。如果你说的是spark `Row` s、 您需要在获取 `Int` / `Double` /其他原语值: 使用本机基元接口检索空值是无效的,相反,用户必须先检查isnullat,然后才能尝试检索可能为空的值。
atmip9wb2#
也许你可以用 Option s。就像:
Option
val d: Double = ... val isNull = Option(d).isDefined
也可以使用模式匹配:
val d: Double = ... Option(d) match { case Some(v) => use v case _ => you got Null }
q43xntqr3#
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
字符串是anyref,因此可以为空:
// this is ok! val c: String = null
这就是为什么模式匹配nulls到int/double类型是不可能的:
// wont compile! null match { case a:Int => "is a null Int" case _ => "something else" }
3条答案
按热度按时间iecba09b1#
isEmpty
与“检查空值”完全不同。打电话isEmpty
在null
将失败:atmip9wb2#
也许你可以用
Option
s。就像:也可以使用模式匹配:
q43xntqr3#
null仅适用于scala中的anyref(即非基元类型)类型。anyval类型不能设置为null。
例如:
字符串是anyref,因此可以为空:
这就是为什么模式匹配nulls到int/double类型是不可能的: