将 Matplotlib 输出保存到 Databricks 上的 DBFS

Kik*_*eko 9 matplotlib databricks

我正在 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()
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情:

plt.savefig("/FileStore/my-file.png")
Run Code Online (Sandbox Code Playgroud)

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

fig = plt.gcf()
dbutils.fs.put("/dbfs/FileStore/my-file.png", fig)
Run Code Online (Sandbox Code Playgroud)

TypeError: 有错误的类型 - (,) 是预期的。

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

运行上面的代码plt.show()会给你一个条形图 - 我希望能够将条形图作为图像保存到 DBFS。任何帮助表示赞赏,提前致谢!

小智 5

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

例子

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


Ale*_*oss 3

您可以通过将图窗保存到内存,然后使用Python 本地文件 API写入 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())
Run Code Online (Sandbox Code Playgroud)