我在从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]) }
请帮助!
答案 0 :(得分:8)
d
毫无意义。
假设Option[Double]
是Double
,如果您想要Option
,则无法投放它,您需要获取“{1}}之外的值。” / p>
getOrElse
允许您获取值(如果存在),并在缺席时提供后备值(即None
)。
例如:
d.getOrElse(0) // 0, or anything that makes sense as a fallback
如果d
的类型为Option[Double]
,则d.getOrElse(0)
的类型为Double
。
答案 1 :(得分:5)
这不是你处理Option
的方式。使用.getOrElse
或.map
val ty=ttnew.distinct().leftOuterJoin(rank).map{ case ((key),(c,d)) => (key,c._1,c._2,c._3,d.getOrElse(Double).asInstanceOf[Double]) }
可能(在这种情况下)你会想d.getOrElse(<a-good-default-value-like-zero-maybe>)
其他情况可能您希望传播Option
的含义(该值可能不存在),在这种情况下您应该使用.map
:
val res: Option[String] = optionalDouble.map(doubleValue => callSomeFunctionThatConvertsDoubleToString(value))
你甚至可以使用模式匹配和提取器来做其他事情。例如,使用.collect
(它是.map
,但可能有未涵盖的情况):
val ty=ttnew.distinct().leftOuterJoin(rank).collect{ case ((key),(c,Some(d))) => (key,c._1,c._2,c._3,d) }