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

jam*_*iet 36 python apache-spark-sql spark-dataframe

我有这个代码:

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

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

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

我正在使用Spark 1.6.0.

Neo*_*Neo 54

你可以使用这个limit(n)功能:

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

要么:

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

  • 假设重新运行数据frame.limit(2)将始终返回相同的结果(它不是确定性的)是不安全的。我尝试了这个,但陷入了数小时的调试。 (4认同)

Ant*_*pov 10

您可以使用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
Run Code Online (Sandbox Code Playgroud)

  • [限制`和`头`之间的区别](/sf/answers/2394464481/) (5认同)
  • `head()`和`limit()`之间有显着差异吗? (3认同)
  • @jamiet`head`返回前n行,例如`take`和[`limit`](https://spark.apache.org/docs/1.6.1/api/python/pyspark.sql.html#pyspark.sql .DataFrame.limit)限制将Spark Dataframe设置为指定的数字。在这种情况下,`limit`更合适。 (2认同)
  • 啊,容易。所以`limit()` 是一个转换,`head()` 是一个动作。谢谢安东。 (2认同)