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

所要時間1分
0

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 を使用する

AWS公式
AWS公式更新しました 2年前
コメントはありません