2016-08-22 3 views
0

スパークプロセスでは、RDD[Try[(A, B)]]があります。私はこのRDDf: B => List[C]という関数で変換しなければなりません。私が入手したいのはRDD[Try[(A, B, C)]であり、私はflatMapの機能のアプリケーションから得たリストfにしなければならない。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]]です。どうして?誰かが私が間違っているところを理解するのを助けることができますか?

実際に問題がRDDに関係していないとします。 Probabily RDDListは同じ結果で終了します。

答えて

2

ため、理解ザ・が

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

しかしf(b).map(...)に変換され、あなたがpair.flatMapの引数に望んでいないTry[(A, B, C)]List[(A, B, C)]を与えるだろう。したがって、コードはコンパイルするべきではありません(スコープ内で奇妙な暗黙の変換がない限り)。

IntelliJを使用している場合、エラーを表示せず、誤ったタイプを表示することがあります(または、逆に作業コードにエラーが表示されることがあります)。実際にプロジェクトをビルドする必要があります実際のエラーを参照してください。

+0

のIntelliJを使用しています。私は自分のコードを作成しようとし、私はあなたに知らせるでしょう。 –

0

RDDを正式に入力しようとしましたか?

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

編集: これはあなたにエラーが発生しない場合は、マップの出力が間違っています。 pair変数のタイプはTryです。 スカラーはそれをしませんので、その内容(タプル(A、B))と対話するための命令を追加する必要があります。 また、Try型を保持する必要はありません。 フラットマップを使って成功を収め、RDDをきれいにすることができます。トライクラスの詳細情報について

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)] _ –

関連する問題