2016-04-19 18 views
0

は私が全体のファイルを読み込むとしますSparkでリストのリストを並列化する方法は?

JavaPairRDD<String, String> filesRDD = sc.wholeTextFiles(inputDataPath); 

その後、私はね、次のマッパーがあります。マッパー内の私はのリストを作成する必要があるとし、引数のために

JavaRDD<List<String>> processingFiles = filesRDD.map(fileNameContent -> { 
    List<String> results = new ArrayList<String>(); 

    for (some loop) { 
     if (condition) { 
      results.add(someString); 
     } 
    } 
    . . . 

    return results; 
}); 

を各ファイルから返される文字列です。これで、各リストの各文字列を個別に表示することができ、後で独立して処理する必要があります。 Sparkが一度に各リストを処理するのではなく、各リストの各ストリングを一度に処理するようにしたい。後でcollect()を使うとリストのリストが得られます。

これを行う1つの方法は、個々のリストごとに個別に各文字列ごとにリストのリストを並列化する方法です。

答えて

1

リストファイルのリストを取得するためにファイルRDDをマッピングする代わりに、それをフラットマップし、文字列のRDDを取得することができます。

EDIT: - > 1出力行1入力行1機能:要求からのコメントを追加

マップは1です。 Flatmapは、1行の入力行 - >多数(または0)の出力行の1:N関数です。 flatMapを使用している場合は、出力RDDが文字列のRDD、出力RDDが文字列リストのRDDになるように設計することができます。これはあなたの望むものだと思われます。私はjava-sparkユーザではないので、構文の詳細を伝えることはできません。 Check here構文についてのヘルプ

+0

私はそれが私がやっていることとどのように大きく異なるのか分かりません。あなたはもっと具体的になりますか? – Belphegor

+0

マップは、1行1行 - > 1出力行の1:1関数です。 Flatmapは、1行の入力行 - >多数(または0)の出力行の1:N関数です。 flatMapを使用している場合は、出力RDDが文字列のRDD、出力RDDが文字列リストのRDDになるように設計することができます。これはあなたの望むものだと思われます。私はjava-sparkユーザではないので、構文の詳細を伝えることはできません。 http://spark.apache.org/examples.html – David

+0

のヘルプを確認してください。どうもありがとうございました。あなたの答えにこのコメントを入れて、他の誰かがそれを必要とする場合にはもっと明確になるようにしてください。乾杯! – Belphegor

関連する問題