使用条形图 spark Pandas 显示 Dataframe 数据

Displaying Dataframe data using a bar chart spark Pandas

我有以下数据框 df。

root
 |-- id: long (nullable = false)
 |-- subject: string (nullable = true)
 |-- Marks: long (nullable = true)
 |-- year: long (nullable = true)

我想使用主题、分数和年份列绘制条形图。对于每一个,我都想看看每个科目的分数是如何得分的。我无法弄清楚如何使用三列或更多列来绘制条形图。我尝试了以下代码来尝试映射所有三列。这是正确的方法吗?

 barchartPandas = df.toPandas()
    barchartPandas.pivot('year', 'subject', 'marks').plot.bar(stacked=False, legend=False, figsize=(20,10))

此外,如果我有大量主题,我的条形图会非常小。每个酒吧都非常小,很难想象。我怎样才能增加每个栏的大小?

有两种选择:

  1. 首先将 Spark 数据帧转换为 Pandas 数据帧,然后 运行 在 Pandas 数据帧上进行数据透视操作:

    pandas_df = df.toPandas().pivot('year', 'subject', 'marks')
    

    这将首先将所有数据移动到 Spark 驱动程序(当调用 toPandas() 时),然后 运行 仅在驱动程序上聚合。只有在数据量较小且驱动程序可以处理未聚合数据时,这才是一个好方法。

  2. 首先在Spark数据帧上执行数据透视操作,然后将聚合结果收集到驱动程序:

    pandas_df = df.groupBy("year").pivot("subject").max("marks").toPandas().set_index("year")
    

    在第二种方法中,只有 聚合的 数据被发送到驱动程序,而繁重的工作由 Spark 集群中的 Spark 完成(如果有的话)。除非数据量真的很小,否则第二种方法应该表现更好。

两种方法的结果是相同的 Pandas 数据帧。然后可以按照问题中的描述显示此数据框。

pandas_df.plot.bar(stacked=False, legend=False, figsize=(20,10)) 

您可以使用 width 参数控制条形的宽度:

pandas_df.plot.bar(stacked=False, legend=False, figsize=(20,10), width=.1)