Amazon SageMaker ノートブックインスタンスを Sparkmagic (PySpark) カーネルで実行しようとしています。Python ライブラリをインストールするために pip を使用しましたが、「ModuleNotFoundError:No module named 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 クラスターを作成し、ノートブックインスタンスにそれを接続します。
関連情報
Amazon SageMaker で Apache Spark を使用する