Pyspark:以表格格式显示spark Dataframe

uz75evzq  于 9个月前  发布在  Spark
关注(0)|答案(7)|浏览(78)

我正在使用pyspark读取一个parquet文件,如下所示:

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

然后当我执行my_df.take(5)时,它将显示[Row(...)],而不是像我们使用pandas Dataframe 时那样的表格格式。
是否可以像pandas数据框那样以表格格式显示数据框?谢谢你,谢谢

rkkpypqq

rkkpypqq1#

show方法可以满足您的要求。
例如,给定以下3行的dataframe,我可以像这样只打印前两行:

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
csbfibhn

csbfibhn2#

假设我们有以下Spark DataFrame:

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

通常有三种不同的方法可以用来打印 Dataframe 的内容:

打印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()将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
  • 请注意,当您必须处理相当大的多个 Dataframe 时,不建议这样做,因为Pandas需要将所有数据加载到内存中。如果是这种情况,以下配置将有助于将大型spark框架转换为pandas框架:*
spark.conf.set("spark.sql.execution.arrow.pyspark.enabled", "true")
kqqjbcuj

kqqjbcuj3#

正如@布伦特在@maxymoo回答的评论中提到的,你可以试试

df.limit(10).toPandas()

在伦敦找个更漂亮的位子但是如果您没有缓存spark框架,这可能需要一些时间来运行。此外,.limit()将不会保持原来的Spark点阵顺序。

oyxsuwqo

oyxsuwqo4#

是的:在你的pandas框架上调用toPandas方法,你会得到一个实际的pandas框架!

w1e3prcc

w1e3prcc5#

默认情况下,**show()函数打印20条DataFrame记录。您可以通过向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
axzmvihb

axzmvihb6#

如果你使用的是Mysteriotype,这是我的工作:
[1]df= spark.read.parquet(“s3://df/*”)
[2]dsp =用户
[3]%%显示DSP
这显示了格式良好的HTML表格,您也可以直接在上面绘制一些简单的图表。有关%%display的更多文档,请键入%%help。

kqlmhetl

kqlmhetl7#

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

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

相关问题