我如何解决运行 Sparkmagic 内核的 Amazon SageMaker 笔记本上的 ModuleNotFoundError?

上次更新时间:2020 年 6 月 15 日

我尝试运行具有 Sparkmagic (PySpark) 内核的 Amazon SageMaker 笔记本实例。我使用 pip 安装 Python 库,但收到以下错误:“ModuleNotFoundError:没有模块命名为 my_module_name。” 我如何解决此错误?

简短描述

当您使用 Sparkmagic 内核时,Amazon SageMaker 笔记本将用作在远程 Amazon EMR 集群AWS Glue 开发终端节点上运行的 Apache Spark 会话的一个接口。

当您使用 pip 在笔记本实例上安装 Python 库时,该库仅可用于本地笔记本实例。要解决 ModuleNotFoundError,在 AWS Glue 开发终端节点或 EMR 集群的每个节点上安装库。

注意:如果使用库的代码不需要太多的计算能力(例如,查看结果),您可以使用本地模式 (%%local) 以仅在本地笔记本实例上运行单元格。当您执行此操作时,您不必在远程集群或开发终端节点上安装库。

解决方法

要在远程 AWS Glue 开发终端节点上安装库,请参阅将 Python 库加载到开发终端节点中

要在远程 EMR 集群上安装库,您可以在创建集群时使用引导操作。如果您已经将 EMR 集群连接到 Amazon SageMaker 笔记本实例,则在集群节点上手动安装库:

1.    使用 SSH 连接到主节点

2.    安装库。此示例显示了如何安装 pandas

sudo python -m pip install pandas

3.    确认已成功安装模块:

python -c "import pandas as pd; print(pd.__version__)"

4.    打开 Amazon SageMaker 笔记本实例,然后重新启动内核。

5.    要确认库按预期工作,请运行需要该库的命令。例如:

pdf = spark.sql("show databases").toPandas()

6.    使用 SSH 连接到另一个集群节点,然后在每个节点上安装库。

如果您不需要在远程集群或开发终端节点上运行代码,则使用本地笔记本实例替代之。例如,不在 Spark 集群的每个节点上安装 matplotlib,而是使用本地模式 (%%local) 在本地笔记本实例上运行单元格。

以下示例显示了如何将结果导出到本地变量,然后在本地模式下运行代码:

1.    将结果导出到本地变量:

%%sql -o query1
SELECT 1, 2, 3

2.    在本地运行代码:

%%local
print(len(query1))

您还可以使用 Amazon SageMaker Spark 库在笔记本实例上运行本地 Spark 会话。这样一来,您可以在 Spark 管道中使用 SageMakerEstimator 估算程序。您可以使用本地 SparkSession 通过 Spark 操作数据。然后,使用 Amazon SageMaker Spark 库进行训练和推理。有关更多信息,请参阅 AWS 实验室 GitHub 存储库上的 pyspark_mnist_kmeans 示例笔记本。此示例笔记本使用 conda_python3 内核,并且不受 EMR 集群支持。对于拥有繁重工作负载的作业,请创建远程 Spark 集群,然后将它连接到笔记本实例。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?