【问题标题】:Saving Matplotlib Output to DBFS on Databricks将 Matplotlib 输出保存到 Databricks 上的 DBFS
【发布时间】:2020-04-15 21:59:02
【问题描述】:

我正在 Databricks 上编写 Python 代码来处理一些数据和输出图表。我希望能够将这些图表作为图片文件(.png 之类的,格式并不重要)保存到 DBFS。

代码:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'fruits':['apple','banana'], 'count': [1,2]})
plt.close()
df.set_index('fruits',inplace = True)
df.plot.bar()
# plt.show()

我尝试过的事情:

plt.savefig("/FileStore/my-file.png")

[Errno 2] 没有这样的文件或目录:'/FileStore/my-file.png'

fig = plt.gcf()
dbutils.fs.put("/dbfs/FileStore/my-file.png", fig)

TypeError:类型错误 - 应为 (,)。

经过一番研究,我认为 fs.put 只有在你想保存文本文件时才有效。

使用plt.show() 运行上面的代码会得到一个条形图——我希望能够将条形图作为图像保存到 DBFS。任何帮助表示赞赏,在此先感谢!

【问题讨论】:

    标签: matplotlib databricks


    【解决方案1】:

    您可以通过将图窗保存到内存然后使用Python local file APIs 写入 DataBricks 文件系统 (DBFS) 来做到这一点。

    例子:

    import matplotlib.pyplot as plt
    from io import BytesIO
    
    # Create a plt or fig, then:
    buf = BytesIO()
    plt.savefig(buf, format='png')
    
    path = '/dbfs/databricks/path/to/file.png'
    
    # Make sure to open the file in bytes mode
    with open(path, 'wb') as f:
      # You can also use Bytes.IO.seek(0) then BytesIO.read()
      f.write(buf.getvalue())
    

    【讨论】:

      【解决方案2】:

      更简单的方法,只需使用 matplotlib.pyplot。修复dbfs路径:

      例子

      import matplotlib.pyplot as plt
      plt.scatter(x=[1,2,3], y=[2,4,3])
      plt.savefig('/dbfs/FileStore/figure.png')
      

      【讨论】:

        猜你喜欢
        • 2020-05-28
        • 2022-11-04
        • 2022-06-16
        • 2021-03-03
        • 2021-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-10
        相关资源
        最近更新 更多