Sparkmagic カーネルを実行している Amazon SageMaker ノートブックで、ModuleNotFoundError を解決する方法を教えてください。

最終更新日: 2020 年 6 月 15 日

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 クラスターを作成し、ノートブックインスタンスにそれを接続します。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合