2016-02-19 9 views
7

Ich möchte eine Aktion für eine einzelne Spalte ausführen. Leider, nachdem ich diese Spalte transformiert habe, ist sie jetzt nicht mehr ein Teil des Datenrahmens, von dem sie kam, sondern ein Column-Objekt. Als solches kann es nicht gesammelt werden. HierWie sammle ich eine einzelne Spalte in Spark?

ein Beispiel:

df = sqlContext.createDataFrame([Row(array=[1,2,3])]) 
df['array'].collect() 

Dies erzeugt den folgenden Fehler:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'Column' object is not callable 

Wie kann ich die collect() Funktion auf einer einzigen Spalte verwenden?

Antwort

11

Wählen Sie einfach und flatMap:

df.select("array").flatMap(lambda x: x).collect() 
## [[1, 2, 3]] 

bearbeiten 23/1/2017

Spark Ab 2.0.0 Sie müssen explizit .rdd angeben, um flatMap

verwenden
df.select("array").rdd.flatMap(lambda x: x).collect() 
+0

so wählen Sie stattdessen der Subsetting wandelt dies im Wesentlichen in einen Ein-Spalten-Datenrahmen anstelle einer Spalte um. – Michal

+0

Das ist richtig. 'Spalte' ist nur ein SQL-DSL-Ausdruck und keine eigenständige Datenstruktur. – zero323

+1

Was ist das Äquivalent in Spark 2.0? Ich kann flatMap nicht als Methode auf dem Datenrahmen sehen. – ThatDataGuy

Verwandte Themen