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 次 |
| 最近记录: |