从spark数据帧中取n行并传递给toPandas()

问题描述 投票:30回答:2

我有这个代码:

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

工作正常,做它需要的东西。假设我只想显示前n行,然后调用toPandas()返回pandas数据帧。我该怎么做?我不能调用take(n),因为它不会返回数据帧,因此我无法将其传递给toPandas()

换句话说,如何从数据帧中获取前n行并在结果数据帧上调用toPandas()?想不到这很难但我无法弄清楚。

我正在使用Spark 1.6.0。

python apache-spark-sql spark-dataframe
2个回答
43
投票

你可以使用limit(n)函数:

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

要么:

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

7
投票

您可以使用head获取Spark DataFrame的第一行,然后创建Pandas 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
© www.soinside.com 2019 - 2024. All rights reserved.