my_df = sqlContext.read.parquet('hdfs://myPath/myDB.db/myTable/**')
当我使用my_df.take(5)
时,它会显示[Row(...)]
而不是像使用pandas数据框时一样的表格格式。
是否有可能以表格格式显示数据框,就像使用pandas数据框一样?谢谢!
my_df = sqlContext.read.parquet('hdfs://myPath/myDB.db/myTable/**')
当我使用my_df.take(5)
时,它会显示[Row(...)]
而不是像使用pandas数据框时一样的表格格式。
是否有可能以表格格式显示数据框,就像使用pandas数据框一样?谢谢!
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
pandas
相比非常原始:例如,对于包装而言它不允许水平滚动。 - WestCoastProjects假设我们有以下的Spark DataFrame:
df = sqlContext.createDataFrame(
[
(1, "Mark", "Brown"),
(2, "Tom", "Anderson"),
(3, "Joshua", "Peterson")
],
('id', 'firstName', 'lastName')
)
通常有三种方式可以用来打印数据框的内容:
打印 Spark 数据框
最常见的方法是使用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()
将Spark DataFrame转换为Pandas DataFrame,最后使用print()
进行打印。
>>> df_pd = df.toPandas()
>>> print(df_pd)
id firstName lastName
0 1 Mark Brown
1 2 Tom Anderson
2 3 Joshua Peterson
请注意,在处理相当大的数据框时,不建议使用此方法,因为Pandas需要将所有数据加载到内存中。如果是这种情况,以下配置将有助于将大型Spark数据帧转换为Pandas数据帧:
spark.conf.set("spark.sql.execution.arrow.pyspark.enabled", "true")
更多细节请参考我的博客文章如何高效地在PySpark和Pandas DataFrames之间转换
正如@Brent在@maxymoo回答的评论中提到的,您可以尝试
df.limit(10).toPandas()
为了在Jupyter中获得一个更漂亮的表格。但是如果您没有缓存Spark DataFrame,这可能需要一些时间才能运行。另外,.limit()
不会保留原始Spark DataFrame的顺序。
toPandas()
,请考虑启用PyArrow优化:https://medium.com/@giorgosmyrianthous/how-to-efficiently-convert-a-pyspark-dataframe-to-pandas-8bda2c3875c3 - Giorgos Myrianthous是的:在你的数据框上调用toPandas
方法,你会得到一个实际的 pandas 数据框!
默认情况下,show()函数会打印DataFrame的20条记录。您可以通过向show()函数提供参数来定义要打印的行数。由于您永远不知道DataFrame将具有多少行,因此我们可以将df.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
df.display()
# OR
df.select('column1').display()
pyspark.sql.DataFrame
类中没有display()
函数。 - Kashyap
my_df.take(5).show()
。 - MaxU - stand with Ukraine