2016-11-23 5 views
0

私はいくつかのRDDの和集合を得ようとしています。 RDDはSparkContext.textFile経由で読み込まれていますが、ファイルシステム上には存在しないものもあります。存在しないかもしれないRDDの和集合を見つける

val rdd1 = Try(Repository.fetch(data1Path)) 
val rdd2 = Try(Repository.fetch(data2Path)) 
val rdd3 = Try(Repository.fetch(data3Path)) 
val rdd4 = Try(Repository.fetch(data4Path)) 

val all = Seq(rdd1, rdd2, rdd3, rdd4) 
val union = sc.union(all.map {case Success(r) => r}) 
val results = union.filter(some-filter-logic).collect 

しかしによる遅延評価に、これらすべてのTryの文は関係なく、ファイルが存在しているかどうかのSuccessに評価し、私はcollectが呼ばれた時に評価FileNotFoundExceptionで終わります。

方法はありますか?

答えて

0

ループを実行してファイルが存在するかどうかをチェックし、同じループ内でRDDを作成して共用体を取得することができます。 OR wholeTextFiles APIを使用して、1つのディレクトリにあるすべてのファイルをキー、値のペアとして読み取ることができます。

val rdd=sc.wholeTextFiles(path, minPartitions) 

ファイルも空であれば問題は発生しません。

関連する問題