2016-11-10 10 views
6

mam ten kod:Take n wierszy z dataframe zapłonowej i przekazywanie toPandas()

l = [('Alice', 1),('Jim',2),('Sandra',3)] 
df = sqlContext.createDataFrame(l, ['name', 'age']) 
df.withColumn('age2', df.age + 2).toPandas() 

działa dobrze, robi to, co musi. Załóżmy jednak, że chcę wyświetlić tylko pierwsze n wierszy, a następnie wywołać toPandas(), aby zwrócić ramkę danych pandy. Jak mam to zrobić? Nie mogę zadzwonić pod numer take(n), ponieważ to nie zwraca ramki danych, a tym samym nie mogę jej przesłać do toPandas().

Podążając w inny sposób, w jaki sposób mogę pobrać górne n wierszy z ramki danych i wywołać toPandas() na wynikowej ramce danych? Nie mogę myśleć, że to jest trudne, ale nie mogę tego rozgryźć.

Używam Spark 1.6.0.

Odpowiedz

11

Można użyć limitu (n) Funkcja:

l = [('Alice', 1),('Jim',2),('Sandra',3)] 
df = sqlContext.createDataFrame(l, ['name', 'age']) 
df.limit(2).withColumn('age2', df.age + 2).toPandas() 

LUB

l = [('Alice', 1),('Jim',2),('Sandra',3)] 
df = sqlContext.createDataFrame(l, ['name', 'age']) 
df.withColumn('age2', df.age + 2).limit(2).toPandas() 
+0

Zobacz Wiedziałem, że to będzie łatwe :) Dziękuję bardzo. – jamiet

+0

Nie ma za co! – Neo

0

Można dostać pierwsze rzędy Spark DataFrame z head a następnie utworzyć Pandy DataFrame:

l = [('Alice', 1),('Jim',2),('Sandra',3)] 
df = sqlContext.createDataFrame(l, ['name', 'age']) 

df_pandas = pd.DataFrame(df.head(3), columns=df.columns) 

In [4]: df_pandas 
Out[4]: 
    name age 
0 Alice 1 
1  Jim 2 
2 Sandra 3 
+0

Czy istnieje znacząca różnica między 'head()' a 'limit()'? – jamiet

+1

@jamiet 'head' zwraca pierwsze n wierszy, takich jak' take', i ['limit'] (https://spark.apache.org/docs/1.6.1/api/python/pyspark.sql.html#pyspark. sql.DataFrame.limit) ograniczyły dane do Spark Dataframe do określonej liczby. Prawdopodobnie w takim przypadku bardziej odpowiedni jest "limit". –

+2

[różnica między 'limit' i' head'] (https://stackoverflow.com/a/34206635/4542359) –