我想使用 Sparkmagic (PySpark) 核心來執行 Amazon SageMaker 筆記本執行個體。我使用 pip 來安裝 Python 程式庫,但我收到下列錯誤訊息: 「ModuleNotFoundError: 沒有名為 my_module_name 的模組。」
簡短描述
當您使用 Sparkmagic 核心時,SageMaker 筆記本會作為 Apache Spark 工作階段的介面。Apache Spark 工作階段會在遠端 Amazon EMR 叢集或 AWS Glue 開發端點上執行。當您使用 pip 在筆記本執行個體上安裝 Python 程式庫時,該程式庫僅適用於本機筆記本執行個體。如要解決 ModuleNotFoundError,請在 AWS Glue 開發端點或 EMR 叢集的每個節點上安裝程式庫。
注意:如果使用程式庫的程式碼不需要大量運算,請使用本機模式 (%%local)。本機模式只會在本機筆記本執行個體上執行儲存格。當您使用本機模式時,您不需要在遠端叢集或開發端點上安裝程式庫。
解決方法
在 AWS Glue 開發端點上安裝程式庫
若要在 AWS Glue 開發端點上安裝程式庫,請參閱在開發端點中載入 Python 程式庫。
在 Amazon EMR 叢集上安裝程式庫
**注意:**在下列命令中,將 Example-library 替換為您要使用的程式庫。
若要在遠端 Amazon EMR 叢集上安裝程式庫,請在建立叢集時使用引導操作。如果您將 Amazon EMR 叢集連線至 SageMaker 筆記本執行個體,請手動將程式庫安裝到所有叢集節點。
請完成下列步驟:
-
使用 SSH 連線至主節點。
-
安裝程式庫:
sudo python -m pip install pandas
-
確認模組已成功安裝:
python -c "import Example-library as pd; print(pd.__version__)"
-
開啟 Amazon SageMaker 筆記本執行個體,然後重新啟動核心。
-
若要確認程式庫是否正常運作,請執行需要該程式庫的命令,例如下命令:
pdf = spark.sql("show databases").toExample-library()
-
使用 SSH 連線至其他叢集節點,然後將程式庫安裝到每個節點。
使用本機模式
如果您不需要在遠端叢集或開發端點上執行程式碼,請使用本機筆記本執行個體。例如,不要在 Spark 叢集的每個節點上安裝 matplotlib。而是使用本機模式 (%%local) 在本機筆記本執行個體上執行儲存格。
**注意:**在下列命令中,將範例變數替換為您的變數。
若要將結果匯出到本機變數,並以本機模式執行程式碼,請完成下列步驟:
-
將結果匯出到本機變數:
%%sql -o query1SELECT 1, 2, 3
-
在本機執行程式碼:
%%localprint(len(query1))
若要在 Spark 管道中使用 SageMakerEstimator,請執行本機 Spark 工作階段來修改資料。然後,使用 SageMaker Spark 程式庫進行訓練和預測。如需詳細資訊,請參閱 AWS 實驗室 GitHub 儲存庫上的 sagemaker-spark。
若要查看範例筆記本,請參閱 AWS 實驗室 GitHub 儲存庫上的 pyspark_mnist_kmeans。此範例筆記本使用的是 conda_python3 核心,該核心並未由 EMR 叢集支援。對於工作負載較大的作業,請建立遠端 Spark 叢集,然後將其連線至筆記本執行個體。
相關資訊
將 Apache Spark 與 Amazon SageMaker 搭配使用
在 Amazon EMR 中建立由 Spark 支援的 Amazon SageMaker 筆記本