我正在使用pyspark来阅读下面的镶木地板文件:
my_df = sqlContext.read.parquet('hdfs://myPath/myDB.db/myTable/**')
然后当我my_df.take(5)
时,它会显示[Row(...)]
,而不是像我们使用pandas数据框时那样的表格格式。
是否可以以pandas数据框等表格格式显示数据框?谢谢!
答案 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。