2016-06-15 5 views
0

meinen Code anzeigenRDD, PySpark, Warum rdd.flatMap scheint keine Operation in CPU?

In [10]: rdd = sc.mongoPairRDD("mongodb://localhost/stackoverflow.stack") 

...... 
    A lot of INFO 
......  

In [11]: newrdd = rdd.flatMap(f) 

# No INFO 

In [12]: newrdd.collect() 
# A lot of INFO 

Wenn eine Funktion von rdd Anruf war, sagen flatMap, es das System scheint nicht den Code der Funktion ausgeführt werden. Aber wenn, sagen wir Anruf collect(), läuft das System und sammelt alle Daten aus dem Speicher oder der Festplatte?

Bin ich richtig?

Antwort

1

Ja, du bist es! Es ist eigentlich das erwartete Verhalten für Spark. Es gibt Transformationen (zB map, flatMap, reduzieren) und Aktionen (zählen, sammeln, saveAsTextFile), die Sie auf eine RDD anwenden können.

Wie Sie bemerkt haben, wenn Sie eine Umwandlung aufrufen, passiert keine Berechnung, sondern stapelt die Operation einfach auf die RDD, um irgendeine Art von Rezept zu erhalten, um sie zu erzeugen. Aber sobald Sie eine Aktion dann Boom aufrufen, wird die RDD tatsächlich ausgewertet. Dies geschieht, wenn Sie collect aufrufen.