Sparkmagic (PySpark) カーネルを使用して Amazon SageMaker ノートブックインスタンスを実行しようとしています。pip を使用して Python ライブラリをインストールしたところ、次のエラーが発生しました。 「ModuleNotFoundError: No module named 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))
SageMakerEstimator を Spark パイプラインで使用するには、ローカルの Spark セッションを実行してデータを変更します。次に、SageMaker Spark ライブラリを使用してトレーニングと予測を行います。詳細については、AWS Labs の GitHub リポジトリで「sagemaker-spark」を参照してください。
ノートブックの例については、AWS Labs の GitHub リポジトリで pyspark_mnist_kmeans を参照してください。このノートブック例では、EMR クラスターを基盤としない conda_python3 カーネルを使用しています。負荷が高いジョブでは、リモートの Spark クラスターを作成し、クラスターをノートブックインスタンスに接続します。
関連情報
Amazon SageMaker で Apache Spark を使用する
Amazon EMR で Spark 基盤の Amazon SageMaker ノートブックを作成する