2016-11-10 173 views
6

我有這樣的代碼:取N行,並傳遞給toPandas()

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

做工精細,做什麼需要的地方。假設我只想顯示前n行,然後調用toPandas()來返回一個熊貓數據幀。我該怎麼做?我不能撥打take(n),因爲這不會返回數據幀,因此我無法將其傳遞給toPandas()

換句話說,如何從數據框中獲取前n行並在結果數據框上調用toPandas()?不能認爲這很難,但我無法弄清楚。

我正在使用Spark 1.6.0。

回答

11

您可以使用限制(n)函數:

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

OR

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

看我知道這很容易:)非常感謝。 – jamiet

+0

歡迎您! – Neo

0

你可以得到星火數據幀的第一行與head,然後創建熊貓據幀:

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

'head()'和'limit()'之間有明顯的區別嗎? – jamiet

+1

@jamiet'head'返回n行,比如'take'和['limit'](https://spark.apache.org/docs/1.6.1/api/python/pyspark.sql.html#pyspark。 sql.DataFrame.limit)將Spark Dataframe限制爲指定的數字。在這種情況下,「極限」可能更合適。 –

+2

[limit'和'head'之間的區別](https://stackoverflow.com/a/34206635/4542359) –

相關問題