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)
请帮忙!
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
.
这不是你如何处理的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)
归档时间: |
|
查看次数: |
2779 次 |
最近记录: |