【问题标题】:How to plot using matplotlib and pandas in pyspark environment?如何在 pyspark 环境中使用 matplotlib 和 pandas 进行绘图?
【发布时间】:2018-10-18 19:42:33
【问题描述】:

我有一个非常大的 pyspark 数据框,我提取了一个样本并将其转换为 pandas 数据框

sample = heavy_pivot.sample(False, fraction = 0.2, seed = None)
sample_pd = sample.toPandas()

数据框如下所示:

sample_pd[['client_id', 'beer_freq']].head(10)


  client_id  beer_freq
0   1000839   0.000000
1   1002185   0.000000
2   1003366   1.000000
3   1005218   1.000000
4   1005483   1.000000
5    100964   0.434783
6    101272   0.166667
7   1017462   0.000000
8   1020561   0.000000
9   1023646   0.000000

我想绘制列"beer_freq"的直方图

import matplotlib.pyplot as plt
matplotlib.pyplot.switch_backend('agg')

sample_pd.hist('beer_freq', bins = 100)

剧情没有出现…… 它给出的结果如下:

 >>>array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7f60f6fd0750>]], dtype=object)

似乎我无法使用 matplotlib 和 pandas 数据框编写通用 python 代码来在 pyspark 环境中绘制图形。

如果我打电话给plt.show() 什么都不会发生...

【问题讨论】:

  • 你打电话给plt.show()了吗?
  • @DavidG 是的,如果我添加 plt.show() 没有任何反应。太奇怪了。

标签: pandas apache-spark matplotlib pyspark pyspark-sql


【解决方案1】:

尝试以下方法:

import matplotlib.pyplot as plt
%matplotlib inline

【讨论】:

    【解决方案2】:

    Databricks 不支持%matplotlib 内联。 您可以使用 display() 显示 matplotlib 图形。示例见https://docs.databricks.com/user-guide/visualizations/matplotlib-and-ggplot.html

    【讨论】:

    • 截至DBR 6.4+,支持%matplotlib inline,因此您不再需要调用display()
    【解决方案3】:

    无法访问。正如 Gaurav 所说,使用display() 如下:

    col_df = heavy_pivot.select('beer_freq')
    display(col_df)
    

    这样,您无需将其更改为 pandas 数据框,最终图看起来相同。显示后,使用输出下的绘图按钮选择直方图。

    来源:

    【讨论】:

      【解决方案4】:

      截至DBR 6.4+,您可以使用%matplotlib inline

      %matplotlib inline
      import pandas as pd
      iris = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')
      iris.hist('sepal_width', bins = 100)
      

      【讨论】:

        【解决方案5】:

        您似乎在终端中使用 ipython/python shell。由于您使用的是 spark,我猜您的 shell 环境正在远程服务器上运行。为了在远程服务器上绘图,您需要启用 X11 转发。请参阅https://adoni.github.io/2019/01/08/plot-on-server/#through-x11 作为参考。

        其他选项:

        1. 安装 jupyter notebook 或 jupyterlab,在 notebook 环境中绘图
        2. 使用plt.savefig('plot.png') 保存绘图以将绘图保存到文件中。然后下载到本地。

        【讨论】:

          猜你喜欢
          • 2017-12-12
          • 2018-06-03
          • 2018-02-24
          • 2018-05-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多