2016-11-16 5 views
0

옵션 [Double]에서 Double로 캐스팅 할 때 문제가 있습니다. 다음 예외 오류가 발생합니다.옵션 [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]) } 

Please Help!

답변

6
d.getOrElse(Double).asInstanceOf[Double] 

는 의미가 없습니다. 당신이 Double 당신이 캐스팅 할 수 없습니다 갖고 싶어 d 가정

Option[Double], 당신은 Option "에서"값을 얻을 필요가있다.

getOrElse 값이있는 경우 값을 가져올 수 있으며 부재시 대체 값을 제공합니다 (예 : None). 예를 들어

: 다음 Option[Double]을 입력 한

d.getOrElse(0) // 0, or anything that makes sense as a fallback 

d 경우 d.getOrElse(0)Double을 입력있다.

+0

그래서, 내가 d.getOrElse에서 d.getOrElse에 [더블 (더블) .asInstanceOf을 변경하는 가정하고 (0) – Rushabh

+0

예, '0'은 도메인의 적절한 기본값으로 대체 될 수 있습니다. –

+0

고마워. 나는 오류가 지속되면 다시 시도하고 당신에게 돌아갈 것입니다. – Rushabh

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]) } 

당신은 아마 당신이 Option의 의미 (값이 존재하지 않을 수)를 전파 할 d.getOrElse(<a-good-default-value-like-zero-maybe>)

다른 상황을 수행 할 것이며, 그에서 경우에 당신은 사용해야 .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) } 
+0

그러나이 경우에는 어떻게지도를 사용할 수 있습니다. 어리석은 질문일지도 모르지만, 나는 완전히 스칼라에 새롭다 – Rushabh

+0

는 몇몇 대안을 추가했다 @rrr – pedrorijo91

+0

이 수집 케이스를 사용해서, 그것은 d에서 모든 케이스를 포함 할 것인가? – Rushabh