ノートブックでインタラクティブな PySpark ジョブを実行する際、サードパーティの Python ライブラリを使用してデータ処理と分析を強化できます。このトピックでは、これらのライブラリをインストールするための 3 つのメソッドについて説明します。
背景情報
インタラクティブな PySpark 開発中に、サードパーティの Python ライブラリを使用することで、より柔軟でユーザーフレンドリなデータ処理と分析が可能になります。このトピックでは、利用可能な 3 つのメソッドについて説明します。ニーズに最も適したものを選択してください。
|
メソッド |
ユースケース |
|
ノートブック内で Spark に関連しない変数 (Spark 計算の戻り値やカスタム変数など) の処理。 重要
このメソッドでインストールされたライブラリはセッション間で永続化されず、再起動のたびに再インストールする必要があります。 |
|
|
各ノートブックセッションにサードパーティライブラリをプリインストールする必要がある PySpark ジョブ向け。 |
|
|
すべてのエグゼキュータでサードパーティライブラリを利用可能にする必要がある分散 PySpark コンピューティング向け。 |
前提条件
-
ワークスペースが作成されていること。詳細については、「ワークスペースの作成」をご参照ください。
-
ノートブックセッションが作成されていること。詳細については、「ノートブックセッションの管理」をご参照ください。
-
ノートブックが作成されていること。詳細については、「ノートブック開発」をご参照ください。
操作手順
メソッド 1: pip を使用したライブラリのインストール
-
ノートブック開発ページに移動します。
-
E-MapReduce コンソールにログインします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
Spark ページで、対象のワークスペースの名前をクリックします。
-
EMR Serverless Spark ページで、左側のナビゲーションウィンドウの Development をクリックします。
-
作成したノートブックをダブルクリックします。
-
-
ノートブックの Python セルに、次のコマンドを入力して scikit-learn ライブラリをインストールし、セルを実行アイコン
をクリックします。pip install scikit-learn -
別の Python セルに、次のコードを入力し、セルを実行アイコン
をクリックします。# ライブラリをインポートし、データセットを準備します。 from sklearn import datasets # Iris データセットなどの組み込みデータセットをロードします。 iris = datasets.load_iris() X = iris.data # 特徴量データ y = iris.target # ラベル # データセットを分割します。 from sklearn.model_selection import train_test_split # データをトレーニングセットとテストセットに分割します。 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # サポートベクターマシン (SVM) モデルをトレーニングします。 from sklearn.svm import SVC # 分類器インスタンスを作成します。 clf = SVC(kernel='linear') # 線形カーネルを使用します。 # モデルをトレーニングします。 clf.fit(X_train, y_train) # トレーニング済みモデルで予測を行います。 y_pred = clf.predict(X_test) # モデルのパフォーマンスを評価します。 from sklearn.metrics import classification_report, accuracy_score print(classification_report(y_test, y_pred)) print("Accuracy:", accuracy_score(y_test, y_pred))出力は次のようになります:
precision recall f1-score support 0 1.00 1.00 1.00 19 1 1.00 1.00 1.00 13 2 1.00 1.00 1.00 13 accuracy 1.00 45 macro avg 1.00 1.00 1.00 45 weighted avg 1.00 1.00 1.00 45 Accuracy: 1.0
メソッド 2: 環境機能を使用した環境の設定
ステップ 1: 実行環境の作成
-
[環境] ページに移動します。
-
E-MapReduce コンソールにログインします。
-
左側のナビゲーションウィンドウで、EMR Serverless > Spark を選択します。
-
[Spark] ページで、対象のワークスペース名をクリックします。
-
EMR Serverless Spark ページで、左側のナビゲーションウィンドウの Environment をクリックします。
-
-
Create Environment をクリックします。
-
Create Environment ページで、Add Library をクリックします。
パラメーターの詳細については、「実行環境の管理」をご参照ください。
-
New Libraryダイアログボックスで、[ソースタイプ]を [PyPI] に設定し、[PyPI パッケージ]を指定して、OK をクリックします。
[PyPI パッケージ] フィールドに、ライブラリの名前とバージョンを入力します。バージョンを指定しない場合、システムは最新バージョンをインストールします。例:
scikit-learn。 -
create をクリックします。
環境が作成されると、システムはその初期化を開始します。
ステップ 2: 実行環境の使用
セッションを編集する前に停止してください。
-
[ノートブックセッション] タブに移動します。
-
EMR Serverless Spark ページで、左側のナビゲーションウィンドウで を選択します。
-
Notebook Session タブをクリックします。
-
-
対象のノートブックセッションの [操作] 列で、編集 をクリックします。
-
Environment ドロップダウンリストから、前のステップで作成した実行環境を選択し、Save Changes をクリックします。
-
右上隅の START をクリックします。
ステップ 3: Scikit-learn を使用したデータの分類
-
ノートブック開発ページに移動します。
-
EMR Serverless Spark ページで、左のナビゲーションウィンドウの Development をクリックします。
-
作成したノートブックをダブルクリックします。
-
-
ノートブックの Python セルに、次のコードを入力し、セルを実行アイコン
をクリックします。# ライブラリをインポートし、データセットを準備します。 from sklearn import datasets # Iris データセットなどの組み込みデータセットをロードします。 iris = datasets.load_iris() X = iris.data # 特徴量データ y = iris.target # ラベル # データセットを分割します。 from sklearn.model_selection import train_test_split # データをトレーニングセットとテストセットに分割します。 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # サポートベクターマシン (SVM) モデルをトレーニングします。 from sklearn.svm import SVC # 分類器インスタンスを作成します。 clf = SVC(kernel='linear') # 線形カーネルを使用します。 # モデルをトレーニングします。 clf.fit(X_train, y_train) # トレーニング済みモデルで予測を行います。 y_pred = clf.predict(X_test) # モデルのパフォーマンスを評価します。 from sklearn.metrics import classification_report, accuracy_score print(classification_report(y_test, y_pred)) print("Accuracy:", accuracy_score(y_test, y_pred))
メソッド 3: Spark パラメーターを使用した環境の設定
このメソッドには、ipykernel 6.29 以降、jupyter_client 8.6 以降、および Python 3.8 以降が必要です。さらに、x86 アーキテクチャの Linux システムで環境をパッケージ化する必要があります。
ステップ 1: conda 環境のビルドとデプロイ
-
次のコマンドを実行して Miniconda をインストールします:
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh chmod +x Miniconda3-latest-Linux-x86_64.sh ./Miniconda3-latest-Linux-x86_64.sh -b source miniconda3/bin/activate -
Python 3.8 と numpy を使用する conda 環境をビルドします。
# conda 環境を作成してアクティブ化します。 conda create -y -n pyspark_conda_env python=3.8 conda activate pyspark_conda_env # サードパーティライブラリをインストールします。 pip install numpy \ ipykernel~=6.29 \ jupyter_client~=8.6 \ jieba \ conda-pack # 環境をパッケージ化します。 conda pack -f -o pyspark_conda_env.tar.gz
ステップ 2: OSS へのリソースファイルのアップロード
パッケージ化された pyspark_conda_env.tar.gz を Alibaba Cloud OSS にアップロードし、完全な OSS パスを記録します。詳細については、「簡単アップロード」をご参照ください。
ステップ 3: ノートブックセッションの設定と開始
セッションを編集する前に停止してください。
-
[ノートブックセッション] タブに移動します。
-
EMR Serverless Spark ページで、左側のナビゲーションウィンドウでを選択します。
-
Notebook Session タブをクリックします。
-
-
対象のノートブックセッションの [操作] 列で、編集 をクリックします。
-
Spark Configuration セクションで、次の設定を追加し、Save Changes をクリックします。
spark.archives oss://<yourBucket>/path/to/pyspark_conda_env.tar.gz#env spark.pyspark.python ./env/bin/python説明設定で、
<yourBucket>/path/toを実際の OSS アップロードパスに置き換えてください。 -
右上隅の START をクリックします。
ステップ 4: Jieba を使用したテキストデータの処理
Jieba は、中国語のテキスト分割用のサードパーティ Python ライブラリです。そのオープンソースライセンスについては、「LICENSE」をご参照ください。
-
ノートブック開発ページに移動します。
-
EMR Serverless Sparkページの左側のナビゲーションウィンドウで、Developmentをクリックします。
-
作成したノートブックをダブルクリックします。
-
-
新しい Python セルに、次のコマンドを入力して Jieba を使用した中国語の単語分割を実行し、セルを実行アイコン
をクリックします。import jieba strs = ["EMRServerlessSpark是一款专为大规模数据处理与分析而打造的全托管Serverless产品", "为您提供了高效的任务开发调试调度以及运维等一站式服务", "EMRServerlessSpark实现了资源调度和根据任务负载进行动态扩展"] sc.parallelize(strs).flatMap(lambda s: jieba.cut(s, use_paddle=True)).collect()コマンドは次の結果を返します:
import jieba strs = ["EMRServerlessSpark是一款专为大规模数据处理与分析而打造的全托管Serverless产品", "为您提供了高效的任务开发调试调度以及运维等一站式服务", "EMRServerlessSpark实现了资源调度和根据任务..."] sc.parallelize(strs).flatMap(lambda s: jieba.cut(s, use_paddle=True)).collect() ['EMRServerlessSpark', '是', '一款', '专', '为', '大规模', '数据处理', '与', '分析', '而', '打造', '的', '全', '托管', 'Serverless', '产品', '为', '您', '提供', '了', '高效', '的', '任务', '开发', '调试', '调度', '以及', '运维', '等', '一站式', '服务', 'EMRServerlessSpark', '实现', '了', '资源', '调度', '和', '根据', '任务', '负载', '进行', '动态', '扩展']