2016-03-02 5 views
9

Ich bin über die glom() Methode auf RDD gestoßen. Gemäß der DokumentationWas ist ein Glom ?. Wie unterscheidet es sich von mapPartitions?

Return ein RDD erstellt, indem alle Elemente innerhalb jeder Partition in ein Array koaleszierende

Hat glom die Daten über die Partitionen mische oder ist es nur die Partitionsdaten als ein Array zurückgeben? Im letzteren Fall, glaube ich, dass die gleichen mapPartitions Verwendung erreicht werden kann.

Ich würde auch gerne wissen, ob es irgendwelche Anwendungsfälle gibt, die von glom profitieren.

+0

@ Zero323 auf eine nette Art und Weise erklärt ... wollte imp hinzufügen. tip d. h. 'glom' ist nützlich, wenn RDD-Operationen mit Matrixbibliotheken implementiert werden sollen, die für Arrays optimiert sind. –

Antwort

7

Hat glom die Daten auf Partitionen

Nein mischt, es nicht

Wenn dies der zweite Fall ist, glaube ich, dass das gleiche mit mapPartitions erreicht werden kann

Es kann:

rdd.mapPartitions(iter => Iterator(_.toArray)) 

aber das gleiche gilt für alle nicht shuffling Transformation wie map, flatMap oder filter.

wenn es irgendwelche Anwendungsfälle gibt, die von glob profitieren.

Jede Situation, in der Sie auf Partitionsdaten in einem Formular zugreifen müssen, das mehr als einmal durchlaufen werden kann.

+0

Können wir nicht mehr als einmal von der Ausgabe von mapPartitions oder map oder filter traversieren? – nagendra

+0

Nicht genau was ich meine. Nehmen wir an, Sie haben eine Funktion '(vs: T) => für {x <- vs; y <- vs} yield (x, y) 'und Sie möchten es auf die vollständigen Partitionen anwenden. Sie können einfach "rdd.glom.map (f)" anstelle von Iterator in mapPartitions konvertieren. Aber im Allgemeinen ist es keine entscheidende Funktion. – zero323