Pyspark:以表格格式显示火花数据框

时间:2016-08-21 18:24:58

标签: python pandas pyspark spark-dataframe

我正在使用pyspark来阅读下面的镶木地板文件:

my_df = sqlContext.read.parquet('hdfs://myPath/myDB.db/myTable/**')

然后当我my_df.take(5)时,它会显示[Row(...)],而不是像我们使用pandas数据框时那样的表格格式。

是否可以以pandas数据框等表格格式显示数据框?谢谢!

5 个答案:

答案 0 :(得分:23)

show方法会执行您正在寻找的内容。

例如,给定以下3行数据帧,我可以像这样打印前两行:

df = sqlContext.createDataFrame([("foo", 1), ("bar", 2), ("baz", 3)], ('k', 'v'))
df.show(n=2)

产生:

+---+---+
|  k|  v|
+---+---+
|foo|  1|
|bar|  2|
+---+---+
only showing top 2 rows

答案 1 :(得分:4)

是的:在您的数据框架上调用toPandas方法,您将获得实际 pandas数据框!

答案 2 :(得分:1)

正如@Brent在@maxymoo的答案评论中提到的,您可以尝试

df.limit(10).toPandas()

在Jupyter中获得更漂亮的表。但是,如果不缓存spark数据帧,则可能需要花费一些时间。另外,.limit()不会保留原始spark数据帧的顺序。

答案 3 :(得分:1)

假设我们有以下Spark DataFrame:

df = sqlContext.createDataFrame([(1, "Mark", "Brown"), (2, "Tom", "Anderson"), (3, "Joshua", "Peterson")], ('id', 'firstName', 'lastName'))

通常可以使用三种不同的方法来打印数据框的内容:

打印Spark DataFrame

最常见的方法是使用show()函数:

>>> df.show()
+---+---------+--------+
| id|firstName|lastName|
+---+---------+--------+
|  1|     Mark|   Brown|
|  2|      Tom|Anderson|
|  3|   Joshua|Peterson|
+---+---------+--------+

垂直打印Spark DataFrame

假设您有相当多的列,并且数据框不适合屏幕。您可以垂直打印行-例如,以下命令将垂直打印前两行,而不会被截断。

>>> df.show(n=2, truncate=False, vertical=True)
-RECORD 0-------------
 id        | 1        
 firstName | Mark     
 lastName  | Brown    
-RECORD 1-------------
 id        | 2        
 firstName | Tom      
 lastName  | Anderson 
only showing top 2 rows

转换为Pandas并打印Pandas DataFrame

或者,您可以使用.toPandas(),最后使用print()将Spark DataFrame转换为Pandas DataFrame。 请注意,当您必须处理相当大的数据帧时,不建议这样做,因为熊猫需要将所有数据加载到内存中。

>>> print(df.toPandas())
   id firstName  lastName
0   1      Mark     Brown
1   2       Tom  Anderson
2   3    Joshua  Peterson

答案 4 :(得分:0)

如果您使用的是 Jupyter,这对我有用:

[1] df= spark.read.parquet("s3://df/*")

[2] DSP = 用户

[3] %%展示 DSP

这显示了格式良好的 HTML 表格,您也可以直接在其上绘制一些简单的图表。有关 %%display 的更多文档,请键入 %%help。