2016-08-06 5 views
0

私はcollectに多くの時間を要する大きなRDDを持っています。 私はすべてのパーティションにmapPartitionsWithIndexを使ってその内容をテキストファイルに書き込ませると考えました。しかし、これは非同期の方法ではありません。スパークRDD.saveAsTextFile非同期

RDDの内容を非同期で書き出す方法はありますか?

+0

なぜ収集しますか?テキストに書き込むだけです。非同期ではありませんが配布されています –

+0

私もその質問をよく理解していません。あなたは 'saveAsTextFile'をタイトルに書いた後、' collect'と 'mapPartitionsWithIndex'について質問します。とにかく答えを出そうとしました。 –

+0

saveastextfileの問題は、タスク全体が終了するまで結果ファイルを読み取ることができないということです。そのときだけ、ドライバにファイルをコピーして読み込みを開始することができます。これは楽しい時間です! mapPartitionWithIndexとasyncSaveAsTextFileを使用して最初に分割します。 – minsky

答えて

4

すべてのスパークRDDアクションは同期しています。 AsyncRDDActionsは、一部の非同期バージョンを提供しますが、saveAsTextFileは提供しません。あなた自身でFutureでそれを包むことは自明です:

def saveAsync(rdd: RDD[String], path: String) = concurrent.Future { 
    rdd.saveAsTextFile(path) 
} 
+0

すべてが少し強みです。結局のところ 'AsyncRDDActions'があります:) – zero323

+0

私はそれについて、感謝しました。 – minsky