適用対象:Azure CLI ml extension v2 (現行)
Python SDK azure-ai-ml v2 (現行)
Azure Machine Learning 統合と Azure Synapse Analytics を併用すると、Azure Synapse を利用する分散コンピューティング機能に簡単にアクセスできます。これにより、Azure Machine Learning 上の Apache Spark ジョブをスケーリングすることができます。
この記事では、Azure Machine Learning サーバーレス Spark コンピューティング、Azure Data Lake Storage (ADLS) Gen 2 ストレージ アカウント、ユーザー ID パススルーを使って Spark ジョブをいくつかの簡単な手順で送信する方法について説明します。
Azure Machine Learning での Apache Spark の概念の詳細については、こちらのリソースを参照してください。
前提条件
適用対象:Azure CLI ml 拡張機能 v2 (現行)
- Azure サブスクリプション。Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
- Azure Machine Learning ワークスペース。 詳細については、ワークスペース リソースの作成に関するページを参照してください。
- Azure Data Lake Storage (ADLS) Gen 2 ストレージ アカウント。 詳細については、Azure Data Lake Storage (ADLS) Gen 2 ストレージ アカウントの作成に関するページを参照してください。
- Azure Machine Learning コンピューティング インスタンスを作成します。
- Azure Machine Learning CLI をインストールする。
Azure ストレージ アカウントにロールの割り当てを追加する
Apache Spark ジョブを送信する前に、入力と出力のデータ パスにアクセスできることを確認する必要があります。 ログイン ユーザーのユーザー ID に共同作成者と ストレージ BLOB データ共同作成者のロールを割り当て、読み取りと書き込みのアクセスを有効にします。
ユーザー ID に適切なロールを割り当てるには:
Microsoft Azure portalを開きます。
ストレージ アカウント サービスを検索して選択します。
[ストレージ アカウント] ページで、一覧から Azure Data Lake Storage (ADLS) Gen 2 ストレージ アカウントを選択します。 ストレージ アカウントの概要を示すページが開きます。
左ペインから [アクセス制御 (IAM)] を選択します。
[ロールの割り当ての追加] を選択します。
ストレージ BLOB データ共同作成者ロールを検索します。
[ストレージ BLOB データ共同作成者] ロールを選択します。
[次へ] を選択します。
ユーザー、グループ、またはサービス プリンシパル を選択します。
[+ メンバーの選択] を選択します。
[選択] の下のテキスト ボックスで、ユーザー ID を検索します。
[選択したメンバー] の下に表示されるように、リストからユーザー ID を選びます。
適切なユーザー ID を選びます。
[次へ] を選択します。
[レビューと割り当て] を選択します。
共同作成者ロールの割り当てについて手順 2 から 13 を繰り返します。
ユーザー ID に適切なロールが割り当てられると、Azure Data Lake Storage (ADLS) Gen 2 ストレージ アカウント内のデータにアクセスできるようになります。
パラメーター化された Python コードを作成する
Spark ジョブには、引数を受け取る Python スクリプトが必要です。 このスクリプトをビルドするために、対話型データ ラングリングから開発された Python コードを変更できます。 サンプルの Python スクリプトを次に示します。
# titanic.py
import argparse
from operator import add
import pyspark.pandas as pd
from pyspark.ml.feature import Imputer
parser = argparse.ArgumentParser()
parser.add_argument("--titanic_data")
parser.add_argument("--wrangled_data")
args = parser.parse_args()
print(args.wrangled_data)
print(args.titanic_data)
df = pd.read_csv(args.titanic_data, index_col="PassengerId")
imputer = Imputer(inputCols=["Age"], outputCol="Age").setStrategy(
"mean"
) # Replace missing values in Age column with the mean value
df.fillna(
value={"Cabin": "None"}, inplace=True
) # Fill Cabin column with value "None" if missing
df.dropna(inplace=True) # Drop the rows which still have any missing value
df.to_csv(args.wrangled_data, index_col="PassengerId")
注
- この Python コード サンプルでは、
pyspark.pandas
を使用します。これをサポートしているのは Spark ランタイム バージョン 3.2 のみです。 -
titanic.py
ファイルがsrc
という名前のフォルダーにアップロードされていることを確認してください。src
フォルダーは、Python スクリプト/ノートブック、またはスタンドアロン Spark ジョブを定義する YAML 仕様ファイルを作成したのと同じディレクトリにある必要があります。
そのスクリプトには --titanic_data
と --wrangled_data
の次の 2 つの引数があります。 これらの引数は、それぞれ入力データ パスと出力フォルダーを渡します。 スクリプトでは titanic.csv
ファイルを使用します (こちらで入手可能)。 このファイルを、Azure Data Lake Storage (ADLS) Gen 2 ストレージ アカウントで作成されたコンテナーにアップロードします。
スタンドアロン Spark ジョブを送信する
適用対象:Azure CLI ml 拡張機能 v2 (現行)
ヒント
Spark ジョブは以下から送信できます。
- Azure Machine Learning コンピューティング インスタンスのターミナル。
- Azure Machine Learning コンピューティング インスタンスに接続された Visual Studio Code のターミナル。
- Azure Machine Learning CLI がインストールされているローカル コンピューター。
この YAML 仕様の例では、スタンドアロンの Spark ジョブを示します。 Azure Machine Learning サーバーレス Spark コンピューティング、ユーザー ID パススルー、abfss://<FILE_SYSTEM_NAME>@<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net/<PATH_TO_DATA>
という形式の入力および出力データの URI が使われます。 ここでは、<FILE_SYSTEM_NAME>
はコンテナー名と一致します。
$schema: http://azureml/sdk-2-0/SparkJob.json
type: spark
code: ./src
entry:
file: titanic.py
conf:
spark.driver.cores: 1
spark.driver.memory: 2g
spark.executor.cores: 2
spark.executor.memory: 2g
spark.executor.instances: 2
inputs:
titanic_data:
type: uri_file
path: abfss://<FILE_SYSTEM_NAME>@<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net/data/titanic.csv
mode: direct
outputs:
wrangled_data:
type: uri_folder
path: abfss://<FILE_SYSTEM_NAME>@<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net/data/wrangled/
mode: direct
args: >-
--titanic_data ${{inputs.titanic_data}}
--wrangled_data ${{outputs.wrangled_data}}
identity:
type: user_identity
resources:
instance_type: standard_e4s_v3
runtime_version: "3.2"
上の YAML 仕様ファイルの内容:
-
code
プロパティには、パラメーター化されたtitanic.py
ファイルを含むフォルダーの相対パスを定義します。 -
resource
プロパティは、サーバーレス Spark コンピューティングで使用されるinstance_type
と Apache Sparkruntime_version
の値を定義します。 現在サポートされているインスタンスの種類の値は次のとおりです。standard_e4s_v3
standard_e8s_v3
standard_e16s_v3
standard_e32s_v3
standard_e64s_v3
この YAML ファイルを az ml job create
コマンドの --file
パラメーターで指定して、次のようにスタンドアロン Spark ジョブを作成できます。
az ml job create --file <YAML_SPECIFICATION_FILE_NAME>.yaml --subscription <SUBSCRIPTION_ID> --resource-group <RESOURCE_GROUP> --workspace-name <AML_WORKSPACE_NAME>
ヒント
Azure Synapse ワークスペースに既存の Synapse Spark プールが存在する場合があります。 既存の Synapse Spark プールを使う場合は、Azure Machine Learning ワークスペース内の Synapse Spark プールをアタッチする手順に従ってください。
次のステップ
- Azure Machine Learning での Apache Spark
- クイックスタート: Apache Spark を使用した対話型データ ラングリング
- Azure Machine Learning で Synapse Spark プールをアタッチして管理する
- Azure Machine Learning での Apache Spark を使用した対話型データ ラングリング
- Azure Machine Learning で Spark ジョブを送信する
- Azure Machine Learning CLI を使用する Spark ジョブのコード サンプル
- Azure Machine Learning Python SDK を使用する Spark ジョブのコード サンプル