2016-08-22 6 views
0

Spark 프로세스에서 나는 RDD[Try[(A, B)]]이 있습니다. 이 RDDf: B => List[C] 함수로 변환해야합니다. 내가 얻고 자하는 것은 RDD[Try[(A, B, C)]이며, 그 중 flatMapf 응용 프로그램에서 얻은 목록입니다. 내가 획득하고 불행하게도 어떤Try of List 요소의 RDD에 대한 이해가 불분명 함

val tryRdd = // Obtain the RDD[Try[(A, B)]] 
val transformedRdd = 
    tryRdd.map { 
    pair => 
     for { 
     (a, b) <- pair 
     c <- f(b) 
     } yield { 
     (a, b, c) 
     } 
    } 

RDD[Try[Nothing]]입니다 :

나는이 tryed. 왜? 아무도 내가 틀린 곳을 이해하도록 도와 줄 수 있습니까?

이 문제는 실제로 RDD과 관련이 없다고 가정합니다. Probabily RDDList과 같은 결과로 끝납니다.

답변

2

에 대한-이해는

pair.flatMap { case (a, b) => f(b).map { case c => (a, b, c) } } 

로 번역 그러나 f(b).map(...) 당신에게 List[(A, B, C)], 아니 당신이 pair.flatMap의 인수에 대해 원하는 Try[(A, B, C)]을 줄 것이다. 따라서 코드가 컴파일되지 않아야합니다 (범위 내에서 이상한 암시 적 변환을하지 않는 한).

IntelliJ를 사용하는 경우 오류를 표시하지 못하고 잘못된 유형을 표시 할 수 있습니다 (또는 다른 방법으로 작업 코드에서 오류를 표시 할 수 있음). 실제로 프로젝트를 빌드해야합니다. 실제 오류를 참조하십시오.

+0

예, IntelliJ를 사용하고 있습니다. 코드를 작성하려고 노력할 것이고 알려 드리겠습니다. –

0

공식적으로 RDD를 입력하려 했습니까?

val transformedRdd : RDD[Try[Tuple3]] = ... 

편집 :이 당신에게 오류가 발생 않습니다 경우, 맵의 출력이 잘못된 것입니다. pair 변수 유형이 Try입니다. 스칼라에서는 이것을 사용하지 않으므로 내용 (튜플 (A, B))과 상호 작용할 수있는 명령어를 추가해야합니다. 또한 Try 유형을 유지할 필요가 없습니다. 성공을 유지하고 RDD를 청소하려면 flatMap을 사용합니다. 은 try 클래스에 대한 자세한 정보에 대한

val transformedRdd = tryRdd.flatMap {value => 
    value match { 
    case Success((a,b)) => ... 
    } 
} 

시계 http://www.scala-lang.org/api/2.9.3/scala/util/Try.html 같은 뭔가.

+0

예, 오류는 다음과 같습니다. _ RDD [Try [Nothing]]의 형식이 예상되는 형식과 일치하지 않습니다. RDD [Try (A, B, C)] _ –