Wie zu verwenden mapPartitions Zündkerzen Scala?

Habe ich DocsRDD : RDD[String, String]

val DocsRDD = sc.wholeTextFiles("myDirectory/*" , 2)

DocsRDD:

Doc1.txt , bla bla bla .....\n bla bla bla \n bla ... bla
Doc2.txt , bla bla bla .....bla \n bla bla \n bla ... bla
Doc3.txt , bla bla bla .....\n bla bla bla \n bla ... bla
Doc4.txt , bla bla \n  .....\n bla bla bla bla \n ... bla

Gibt es eine effiziente, elegante Art, Extrakt n-Gramm von diesen mit mapPartitions?
So weit, ich habe alles versucht, ich habe alles gelesen, was ich finden konnte, mindestens 5 mal über und über, über mapPartitions aber ich kann immer noch nicht verstehen, wie es zu benutzen! Es scheint waaay zu schwierig zu manipulieren.
Kurz gesagt: ich will :

val NGramsRDD = DocsRDD.map(x => (x._1 , x._2.sliding(n) ) )

aber effizient mit mapPartitions.
Mein grundlegendes Missverständnis von mapPartitions ist :

OneDocRDD : RDD[String]

 val OneDocRDD = sc.textFile("myDoc1.txt" , 2)
                   .mapPartitions(s1 : Iterator[String] => s2 : Iterator[String])

Kann ich Nicht verstehen! Aus, wenn s1 wurde Iterator[String]? s1 ist der String nach dem sc.Textdatei.

Okay, meine zweite Frage ist : Wird mapPartitions verbessern meine überwinden, gegen map in dieser situation?

Letztes aber nicht am Wenigsten wichtig:
kann f() sein :

     f(Iterator[String]) : Iterator[Something else?]
  • Ihr Aufruf sc.textFile gibt Ihnen einen RDD[String] mit 2 Partitionen. Jedes element in der RDD ist eine Zeile aus der text-Datei. mapPartitions bietet Ihnen einen iterator über alle Zeilen in jeder partition und geben Sie eine Funktion angewendet werden, um jeder dieser Iteratoren. Du bist wieder erwartet einen iterator, der ist dann abgeflacht, wieder in einen RDD.
  • Danke für die Antwort. Dies löscht mir irgendwie das vage Konzept über mapPartitions.
InformationsquelleAutor Spartan | 2016-11-30
Schreibe einen Kommentar