spark中double/int值的空检查

vof42yt1  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(466)

我是spark的新手,如何检查double中的null值和scala或spark中的int值。
对于字符串,我们可以这样做:

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

我找了很多,但只找到了字符串值。你能给我推荐其他的数据类型吗。
提前谢谢。

iecba09b

iecba09b1#

isEmpty 与“检查空值”完全不同。打电话 isEmptynull 将失败:

val s: String = null
s.isEmpty // throws NullPointerException
``` `Int` 以及 `Double` 不能为null(其他基元类型也不能为null),因此不需要检查它们是否为null。如果你说的是spark `Row` s、 您需要在获取 `Int` / `Double` /其他原语值:
使用本机基元接口检索空值是无效的,相反,用户必须先检查isnullat,然后才能尝试检索可能为空的值。
atmip9wb

atmip9wb2#

也许你可以用 Option s。就像:

val d: Double = ...

val isNull = Option(d).isDefined

也可以使用模式匹配:

val d: Double = ...

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

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"
        }

相关问题