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 einenRDD[String]
mit 2 Partitionen. Jedes element in derRDD
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 einenRDD
. - Danke für die Antwort. Dies löscht mir irgendwie das vage Konzept über mapPartitions.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, dass .mapPartitions helfen (zumindest nicht zum Beispiel), aber mit .mapPartitions würde wie folgt Aussehen:
Regel, die Sie verwenden möchten .mapPartitions erstellen/initialisieren eines Objekts, die Sie nicht wollen (Beispiel: zu groß) oder kann nicht serialisiert werden, um den worker-Knoten. Ohne .mapPartitions würden Sie brauchen, um Sie zu schaffen in der .anzeigen, aber das wäre nicht effizient, da das Objekt erstellt werden, für jedes x.