Zur Begrenzung des großen RDD

Ich lese viele Bilder und würde gerne einen kleinen Teil davon für die Entwicklung bearbeiten. Als Ergebnis versuche ich zu verstehen, wieFunk undPytho könnte das möglich machen:

In [1]: d = sqlContext.read.parquet('foo')
In [2]: d.map(lambda x: x.photo_id).first()
Out[2]: u'28605'

In [3]: d.limit(1).map(lambda x: x.photo_id)
Out[3]: PythonRDD[31] at RDD at PythonRDD.scala:43

In [4]: d.limit(1).map(lambda x: x.photo_id).first()
// still running...

.. also was ist los? Ich würde das @ erwartGrenze( um viel schneller zu rennen als wir in @ hatt[2], aber das ist nicht der Fall*.

Nun werde ich mein Verständnis beschreiben und bitte korrigiere mich, da mir offensichtlich etwas fehlt:

d ist ein RDD von Paaren (das kenne ich aus dem Schema) und ich sage mit der Map-Funktion:

i) Nimm jedes Paar (das mit @ benannt wix und gib mir das @ zurüphoto_id attribute).

ii) Dies führt zu einer neuen (anonymen) RDD, in der wir das @ anwendefirst() Methode, die ich nicht sicher bin, wie es funktioniert$, aber sollte mir das erste Element dieses anonymen RDD geben.

Im[3], wir begrenzen dasd RDD auf 1, was bedeutet, dass trotzd hat viele Elemente, benutze nur 1 und wende die Kartenfunktion nur auf dieses eine Element an. DasOut [3] sollte die RDD sein, die durch das Mapping erstellt wurde.

Im[4], Ich würde erwarten, der Logik von @ zu folg[3] und nur das einzige Element des begrenzten RDD drucken ...

Wie erwartet, scheint nach dem Betrachten des Monitors [4] das @ zu verarbeite gesamter Datensatz, während die anderen nicht, so scheint es, dass ich nicht @ benutlimit() richtig, oder das ist nicht was ich suche:

Bearbeiten

tiny_d = d.limit(1).map(lambda x: x.photo_id)
tiny_d.map(lambda x: x.photo_id).first()

Der erste gibt einPipelinedRDD, was wie beschriebenHie, es wird eigentlich kein @ tAktio, nur eine Transformation.

In der zweiten Zeile wird jedoch auch der gesamte Datensatz verarbeitet (tatsächlich sind jetzt so viele Aufgaben wie zuvor plus eine!).

* [2] wird sofort ausgeführt, während [4] noch läuft und> 3h vergangen sind.

$Ich konnte es in der Dokumentation aufgrund des Namens nicht finden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage