2016-04-19 12 views
0

Angenommen, ich lese ganze Dateien:Wie man eine Liste von Listen mit Spark parallelisiert?

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

Dann habe ich die folgenden Mapper, die s:

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

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

    return results; 
}); 

Aus Gründen der Argumentation an, dass im Inneren des Mapper muss ich eine Liste machen von Strings, die ich von jeder Datei zurücksende. Jetzt kann jeder String in jeder Liste unabhängig betrachtet werden und muss später unabhängig verarbeitet werden. Ich möchte nicht, dass Spark jede Liste auf einmal verarbeitet, sondern jede Zeichenfolge auf einmal. Später, wenn ich collect() benutze, bekomme ich eine Liste von Listen.

Eine Möglichkeit, dies zu tun ist: Wie diese Liste von Listen für jeden String individuell nicht für jede einzelne Liste zu parallelisieren?

Antwort

1

Anstatt fileRDD zuzuordnen, um eine Liste von Listen zu erhalten, flammap es und Sie können eine RDD von Zeichenfolgen erhalten.

EDIT: Hinzufügen Kommentar aus Anfrage

Karte ist eine 1: 1-Funktion, wobei 1 Eingabezeile -> 1 Ausgangszeile. Flatmap ist eine 1: N-Funktion, bei der 1 Eingabezeile -> viele (oder 0) Ausgabezeilen sind. Wenn Sie flatMap verwenden, können Sie es so entwerfen, dass Ihre RDD-Ausgabe und RDD von Strings ist, während Ihre RDD-Ausgabe derzeit eine RDD von Listen von Strings ist. Es klingt wie das, was du willst. Ich bin kein Java-Spark-Benutzer, daher kann ich Ihnen keine Syntaxspezifikationen geben. Check here für Hilfe zur Syntax

+0

Ich bin mir nicht sicher, wie ist das viel anders als das, was ich tue. Kannst du genauer sein? – Belphegor

+0

Map ist eine 1: 1-Funktion, bei der 1 Eingabezeile -> 1 Ausgabezeile ist. Flatmap ist eine 1: N-Funktion, bei der 1 Eingabezeile -> viele (oder 0) Ausgabezeilen sind. Wenn Sie flatMap verwenden, können Sie es so entwerfen, dass Ihre RDD-Ausgabe und RDD von Strings ist, während Ihre RDD-Ausgabe derzeit eine RDD von Listen von Strings ist. Es klingt wie das, was du willst. Ich bin kein Java-Spark-Benutzer, daher kann ich Ihnen keine Syntaxspezifikationen geben. Hier finden Sie Hilfe http://spark.apache.org/examples.html – David

+0

das ist genau das, was ich will! Vielen Dank, bitte setzen Sie diesen Kommentar in Ihre Antwort, damit es klarer ist, falls jemand anders es braucht. Prost! – Belphegor

Verwandte Themen