我該如何解決執行 Sparkmagic 核心的 Amazon SageMaker 筆記本上的 ModuleNotFoundError 問題?

1 分的閱讀內容
0

我正在嘗試使用 Sparkmagic (PySpark) 核心來執行 Amazon SageMaker 筆記本執行個體。我使用 pip 來安裝 Python 程式庫,但我收到下列錯誤訊息: “ModuleNotFoundError: No module named my_module_name.” (沒有名為 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 連接至其他叢集節點,然後將程式庫安裝到每個節點。

如果您不需要在遠端叢集或開發端點上執行程式碼,請改為使用本機筆記本執行個體。例如,請使用本機模式 (%%local) 來執行本機筆記本執行個體上的儲存格,而非將 matplotlib 安裝到 Spark 叢集的每個節點。

下列範例顯示如何將結果匯出到本機變數,然後以本機模式執行程式碼:

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 叢集,然後連接至筆記本執行個體。


相關資訊

使用 Apache Spark 搭配 Amazon SageMaker

AWS 官方
AWS 官方已更新 2 年前