scala中从Option [Double]到Double的转换错误

Rus*_*tel 1 scala scala-collections apache-spark

从Option [Double]到Double,我遇到了一个问题.我收到以下异常错误:

scala.Some cannot be cast to java.lang.Double

val ty = ttnew.distinct().leftOuterJoin(rank).map{ case ((key),(c,d)) => (key,c._1,c._2,c._3,d.getOrElse(Double).asInstanceOf[Double]) }
Run Code Online (Sandbox Code Playgroud)

请帮忙!

Gab*_*lla 9

d.getOrElse(Double).asInstanceOf[Double]
Run Code Online (Sandbox Code Playgroud)

没有意义.

假设d是一个Option[Double],如果你想有一个Double你可以不投,你需要获得值"出来"的Option.

getOrElse允许您获取值(如果存在),并在缺席时提供后备值(即None).

例如:

d.getOrElse(0) // 0, or anything that makes sense as a fallback
Run Code Online (Sandbox Code Playgroud)

如果d有类型Option[Double]d.getOrElse(0)有类型Double.


ped*_*o91 5

这不是你如何处理的Option.使用.getOrElse或a.map

val ty=ttnew.distinct().leftOuterJoin(rank).map{ case ((key),(c,d)) => (key,c._1,c._2,c._3,d.getOrElse(Double).asInstanceOf[Double]) }
Run Code Online (Sandbox Code Playgroud)

可能(在这种情况下)你会想做 d.getOrElse(<a-good-default-value-like-zero-maybe>)

其他情况可能你想传播Option(值可能不存在)的含义,在这种情况下你应该使用.map:

val res: Option[String] = optionalDouble.map(doubleValue => callSomeFunctionThatConvertsDoubleToString(value))
Run Code Online (Sandbox Code Playgroud)

你甚至可以使用模式匹配和提取器来做其他事情.例如,使用.collect(它是a .map,但可能有未覆盖的情况):

val ty=ttnew.distinct().leftOuterJoin(rank).collect{ case ((key),(c,Some(d))) => (key,c._1,c._2,c._3,d) }
Run Code Online (Sandbox Code Playgroud)