2016-02-19 14 views
7

Chciałbym wykonać akcję na pojedynczej kolumnie. Niestety, po przekształceniu tej kolumny, nie jest ona już częścią struktury danych, z której pochodził, ale obiektem kolumny. W związku z tym nie można go zebrać.Jak mogę zebrać pojedynczą kolumnę w Spark?

Oto przykład:

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

To daje następujący błąd:

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

Jak mogę korzystać z funkcji collect() na jednej kolumnie?

Odpowiedz

11

Wystarczy wybrać i flatMap:

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

Edit 23/1/2017

Począwszy od Spark 2.0.0 trzeba wyraźnie określić .rdd aby korzystać flatMap

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

więc zamiast tego użyj wybierz podzbioru zasadniczo zamienia to na jednowymiarową ramkę danych zamiast kolumny – Michal

+0

To prawda. 'Column' jest po prostu wyrażeniem SQL DSL, a nie samodzielną strukturą danych. – zero323

+1

Co to jest odpowiednik iskry 2.0? Nie widzę płaskiej mapy jako metody na DataFrame – ThatDataGuy