【问题标题】:How do I make matplotlib work in AWS EMR Jupyter notebook?如何使 matplotlib 在 AWS EMR Jupyter 笔记本中工作?
【发布时间】:2019-10-09 10:08:09
【问题描述】:

这非常接近这个问题,但我添加了一些针对我的问题的细节:

Matplotlib Plotting using AWS-EMR jupyter notebook

我想找到一种在我的 Jupyter 笔记本中使用 matplotlib 的方法。这是错误的代码-sn-p,它相当简单:

笔记本

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

我选择这个 sn-p 是因为仅此行在尝试使用 TKinter(未安装在 AWS EMR 集群上)时失败:

import matplotlib.pyplot as plt

当我运行完整的笔记本 sn-p 时,结果是没有运行时错误,但也没有任何反应(没有显示图表。)我对这可以工作的一种方式的理解是添加以下任一片段:

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 图的 spark 魔术命令(至少这是我的解释。)在使用引导操作后,我已经尝试了这两种方法:

EMR 引导程序

sudo pip install matplotlib
sudo pip install ipython

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

问题

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

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

【问题讨论】:

  • 从@FoxanNg 发布的图片中,我可以看到jupyter 实例正在使用conda env(可以是为Jupyter 创建的virtualenv)。我们可以尝试在引导程序中使用conda 而不是pip 安装matplotlib 并试一试。
  • 当试图在我的引导文件中调用 conda 时,它不知道在哪里找到它(它得到一个 command not found 错误。)
  • 我不确定集群是如何设置的。但从图像看起来像`/opt/conda/bin/conda'。可以用全路径安装吗?
  • 它认为没有在引导时安装 conda:/opt/conda/bin/conda: command not found
  • 启动了一个EMR集群,发现默认不提供conda支持。您能否确认我们是否没有通过引导程序安装 Conda?

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


【解决方案1】:

正如你所说,matplotlib没有安装在EMR集群上,所以会出现这样的错误:

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

【讨论】:

  • 这个答案使第一个单元格(我放%%local)运行得更快,但添加任何额外的导入(例如 tensorflow)失败,尽管之前已安装和工作。赞成,因为它在技术上使代码 sn-p 运行,但不接受,因为它使笔记本几乎无法使用。
  • 没有办法在那个 docker 容器中安装 matplotlib 吗??我的意思是,也许conda
  • 此答案可能适用于其他环境,但不适用于连接到运行 Sparkmagic (PySpark) 内核的 EMR 集群的 AWS Jupyter 笔记本。
【解决方案2】:

@00schneider 的回答确实有效。

import matplotlib.pyplot as plt

# plot data here
plt.show()

之后

plt.show()

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

%matplot plt

【讨论】:

  • 这是显示绘图的命令。最后,来自与原始问题和我的用例相同的人的回答,即连接到 Sparkmagic (PySpark) 内核的 AWS Sagemaker Jupyter 笔记本
  • 当我在绘图后运行 %matplot plt 时出现错误:UsageError: Cell magic %%matplot not found.
  • 对我来说,这只是输出一个很长的字符串,可能是图像的 base64 表示。
【解决方案3】:

将 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/

【讨论】:

  • 它是 matplotlib 库的一部分吗?还是只是 AWS 的事情?
【解决方案4】:

以下应该有效:

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

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

【讨论】:

  • 我很欣赏尝试的解决方案。我试图在问题中解决这个问题,但这在%matplotlib inline 行失败并出现此错误(我会将错误添加到原始问题中):未知魔法命令'matplotlib' UnknownMagic:未知魔法命令'matplotlib'
  • 好吧..再试一次..你能试试get_ipython().magic(u'matplotlib inline')而不是%matplotlib inline
  • 谢谢,但不幸的是get_ipython() 返回None,因此get_ipython().magic() 失败:(
  • 使用@Matt 推荐我得到name 'get_ipython' is not defined
【解决方案5】:

要在 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

【讨论】:

    【解决方案6】:

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

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

    【讨论】:

    • 这不适用于运行 Sparkmagic (PySpark) 内核的 AWS Sagemaker jupyter notebook。
    猜你喜欢
    • 1970-01-01
    • 2020-08-26
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 2021-03-22
    • 1970-01-01
    相关资源
    最近更新 更多