火花: 以表格格式显示火花数据帧

我正在使用 pypark 阅读拼花地板文件如下:

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

然后,当我做 my_df.take(5),它将显示 [Row(...)],而不是一个表格式,如当我们使用熊猫数据帧。

是否可以像熊猫数据帧那样以表格格式显示数据帧? 谢谢!

261044 次浏览

是的: 调用 toPandas方法在您的数据帧,您将得到一个 真的熊猫数据帧!

表演方法完成了您所需要的工作。

例如,给定以下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

正如@Brent 在@maxmoo 的回答评论中提到的,你可以试试

df.limit(10).toPandas()

在 Jupyter 找张更好的桌子。但是,如果您没有缓存 park 数据帧,那么这可能需要一些时间才能运行。同时,.limit()不会保持原始火花数据帧的顺序。

假设我们有以下 Spark DataFrame:

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

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

打印火花数据框架

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

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

垂直打印火花数据框

假设您有相当多的列,并且您的数据框架不适合在屏幕上显示。您可以垂直打印行-例如,下面的命令将打印最上面的两行,垂直,没有任何截断。

>>> 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

转换为熊猫并打印熊猫数据框

或者,您可以使用 .toPandas()print()将您的 Spark DataFrame 转换成熊猫 DataFrame。

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

请注意,当您必须处理相当大的数据框架时,不建议这样做,因为熊猫需要将所有数据加载到内存中。如果是这种情况,以下配置将有助于将大型火花数据帧转换为熊猫数据帧:

spark.conf.set("spark.sql.execution.arrow.pyspark.enabled", "true")

更多的细节你可以参考我的博客文章 加速 PySpark 和 Panda DataFrames 之间的转换

如果你正在使用木星,这是什么工作对我来说:

Df = stark.read.parquet (“ s3://df/*”)

Dsp = 用户

显示 Dsp

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

也许这样的东西更优雅一些:

df.display()
# OR
df.select('column1').display()

默认情况下,Show ()函数打印20条 DataFrame 记录。可以通过提供 show ()函数的参数来定义要打印的行数。您永远不知道 DataFrame 将拥有多少行。因此,我们可以将 Count ()作为参数传递给 show 函数,该函数将打印 DataFrame 的所有记录。

df.show()           --> prints 20 records by default
df.show(30)         --> prints 30 records according to argument
df.show(df.count()) --> get total row count and pass it as argument to show