如何使matplotlib在AWS EMR Jupyter笔记本中工作?

时间:2019-05-22 21:00:14

标签: python matplotlib pyspark jupyter-notebook amazon-emr

这与这个问题非常接近,但是我添加了一些特定于我的问题的细节:

Matplotlib Plotting using AWS-EMR jupyter notebook

我想找到一种在Jupyter笔记本中使用matplotlib的方法。这是错误的代码片段,非常简单:

笔记本

import matplotlib
matplotlib.use("agg")
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.show()

之所以选择此代码段,是因为该行尝试使用TKinter(AW​​S EMR集群中未安装)时,仅此行失败:

import matplotlib.pyplot as plt

当我运行完整的笔记本代码片段时,结果是没有运行时错误,但也没有任何反应(未显示任何图形。)我可以通过以下任一代码片段来理解这种工作方式:

pyspark魔术符号

%matplotlib inline

结果

unknown magic command 'matplotlib'
UnknownMagic: unknown magic command 'matplotlib'

IPython显式魔术调用

from IPython import get_ipython
get_ipython().run_line_magic('matplotlib', 'inline')

结果

'NoneType' object has no attribute 'run_line_magic'
Traceback (most recent call last):
AttributeError: 'NoneType' object has no attribute 'run_line_magic'

到我的笔记本,该笔记本调用一个火花魔术命令,该命令可内联matplotlib图(至少是我的解释。)我在使用引导操作后尝试了这两种方法:

EMR引导程序

sudo pip install matplotlib
sudo pip install ipython

即使添加了这些,我仍然会得到一个错误,那就是matplotlib没有任何魔力。所以我的问题肯定是:

问题

如何使matplotlib在AWS EMR Jupyter笔记本中工作?

(或者如何在AWS EMR Jupyter笔记本中查看图形并绘制图像?)

6 个答案:

答案 0 :(得分:5)

如前所述,matplotlib未安装在EMR群集上,因此会发生此类错误:

error

但是,它实际上在托管的Jupyter笔记本实例(docker容器)中可用。使用%%local魔术可以让您在本地运行单元格:

local

答案 1 :(得分:3)

以下方法应该起作用:

import matplotlib
%matplotlib inline
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])

在一个单元格中运行整个脚本

答案 2 :(得分:3)

@ 00schneider的答案确实有效。

import matplotlib.pyplot as plt

# plot data here
plt.show()

之后

plt.show()

重新运行包含以下内容的魔术单元,您将在AWS EMR Jupyter PySpark笔记本上看到一个图

%matplot plt

答案 3 :(得分:0)

要在 AWS EMR 笔记本中绘制某些内容,您只需使用 %matplot plt。您可以在 this page from AWS 的中途看到此文档。

例如,如果我想快速绘制一个图:

import matplotlib.pyplot as plt

plt.clf() #clears previous plot in EMR memory
plt.plot([1,2,3,4])
plt.show()

%matplot plt

答案 4 :(得分:-1)

尝试以下代码。仅供参考,我们在emr-5.26.0的Python3.6中安装了matplotlib 3.1.1,并且我使用了PySpark内核。 确保“%matplotlib内联”是单元格中的第一行

%matplotlib inline

import matplotlib
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.show()

答案 5 :(得分:-1)

将matplotlib导入为

import matplotlib.pyplot as plt

并使用魔术命令%matplot plt代替,如此处的教程所示:https://aws.amazon.com/de/blogs/big-data/install-python-libraries-on-a-running-cluster-with-emr-notebooks/