Freigeben über


Konfigurieren von Apache Spark-Aufträgen in Azure Machine Learning

GILT FÜR:Azure CLI ML-Erweiterung v2 (aktuell)Python SDK azure-ai-ml v2 (aktuell)

Die Azure Machine Learning-Integration mit Azure Synapse Analytics bietet einfachen Zugriff auf verteilte Computingfunktionen – unterstützt durch Azure Synapse –, um Apache Spark-Aufträge in Azure Machine Learning zu skalieren.

In diesem Artikel erfahren Sie, wie Sie einen Spark-Auftrag mithilfe einer serverlosen Spark-Compute-Instanz von Azure Machine Learning, eines Azure Data Lake Storage Gen 2-Speicherkontos (ADLS) und eines Passthrough der Benutzeridentität in wenigen einfachen Schritten übermitteln.

Für weitere Informationen zu Apache Spark in Azure Machine Learning-Konzepten besuchen Sie diese Ressource.

Voraussetzungen

GILT FÜRAzure CLI-ML-Erweiterung v2 (aktuell)

Hinzufügen von Rollenzuweisungen in Azure-Speicherkonten

Bevor wir einen Apache Spark-Auftrag übermitteln, müssen wir sicherstellen, dass auf die Eingabe- und Ausgabedatenpfade zugegriffen werden kann. Weisen Sie der Benutzeridentität des angemeldeten Benutzers die Rollen Mitwirkender und Mitwirkender an Speicherblobdaten zu, um Lese- und Schreibzugriff zu aktivieren.

So weisen Sie der Benutzeridentität geeignete Rollen zu

  1. Öffnen Sie das Microsoft Azure-Portal.

  2. Suchen Sie nach dem Dienst Speicherkonten, und wählen Sie ihn aus.

    Erweiterbarer Screenshot: Suche nach und Auswahl des Speicherkontodiensts in Microsoft Azure-Portal.

  3. Wählen Sie auf der Seite Speicherkonten in der Liste das Speicherkonto Azure Data Lake Storage Gen 2 (ADLS) aus. Die Seite Übersicht des Speicherkontos wird geöffnet.

    Erweiterbarer Screenshot: Auswahl des Speicherkontos Azure Data Lake Storage Gen 2 (ADLS).

  4. Wählen Sie im linken Bereich Zugriffssteuerung (IAM) aus.

  5. Wählen Sie Rollenzuweisung hinzufügen aus.

    Erweiterbarer Screenshot: Bildschirm mit Azure-Zugriffsschlüsseln

  6. Suchen Sie nach der Rolle Mitwirkender an Speicherblobdaten.

  7. Wählen Sie die Rolle Mitwirkender an Storage-Blobdaten aus.

  8. Wählen Sie Weiter aus.

    Erweiterbarer Screenshot: Bildschirm „Rollenzuweisung hinzufügen“ in Azure

  9. Wählen Sie User, group, or service principal (Benutzer, Gruppe oder Dienstprinzipal) aus.

  10. Wählen Sie + Mitglieder auswählen aus.

  11. Suchen Sie im Textfeld unter Auswählen nach der Benutzeridentität.

  12. Wählen Sie die Benutzeridentität in der Liste aus, sodass sie unter Ausgewählte Mitglieder angezeigt wird.

  13. Wählen Sie die entsprechende Benutzeridentität aus.

  14. Wählen Sie Weiter aus.

    Erweiterbarer Screenshot: Registerkarte „Mitglieder“ auf dem Bildschirm „Rollenzuweisung hinzufügen“ in Azure

  15. Wählen Sie Überprüfen und zuweisen aus.

    Erweiterbarer Screenshot: Die Registerkarte „Überprüfen + zuweisen“ auf dem Bildschirm „Rollenzuweisung hinzufügen“ in Azure

  16. Wiederholen Sie die Schritte 2 bis 13 für die Zuweisung der Rolle Storage Blob-Mitwirkender.

Die Daten im Azure Data Lake Storage (ADLS) Gen2-Speicherkonto sollten zugänglich werden, sobald der Benutzeridentität die entsprechenden Rollen zugewiesen wurden.

Erstellen von parametrisiertem Python-Code

Ein Spark-Auftrag erfordert ein Python-Skript, das Argumente akzeptiert. Um dieses Skript zu erstellen, können Sie den Python-Code ändern, der aus interaktivem Data Wrangling entwickelt wurde. Ein Python-Beispielskript wird hier gezeigt:

# 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")

Hinweis

  • Dieses Python-Codebeispiel verwendet pyspark.pandas, das nur durch die Spark-Runtimeversion 3.2 unterstützt wird.
  • Stellen Sie sicher, dass die Datei titanic.py in einen Ordner namens src hochgeladen wird. Der Ordner src sollte sich im selben Verzeichnis befinden, in dem Sie das Python-Skript/Notebook oder die YAML-Spezifikationsdatei erstellt haben, die den eigenständigen Spark-Auftrag definiert.

Das Skript akzeptiert zwei Argumente: --titanic_data und --wrangled_data. Diese Argumente übergeben den Eingabedatenpfad bzw. den Ausgabeordner. Das Skript verwendet die titanic.csv-Datei (hier verfügbar). Laden Sie diese Datei in einen Container hoch, der im Azure Data Lake Storage (ADLS) Gen 2-Speicherkonto erstellt wurde.

Übermitteln eines eigenständigen Spark-Auftrags

GILT FÜRAzure CLI-ML-Erweiterung v2 (aktuell)

Tipp

Sie können einen Spark-Auftrag an folgenden Stellen übermitteln:

Diese YAML-Beispielspezifikation zeigt einen eigenständigen Spark-Auftrag. Es verwendet eine serverlose Spark-Compute-Instanz von Azure Machine Learning, ein Passthrough der Benutzeridentität und einen URI für Eingabe-/Ausgabedaten im Format abfss://<FILE_SYSTEM_NAME>@<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net/<PATH_TO_DATA>. Hier entspricht <FILE_SYSTEM_NAME> dem Containernamen.

$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"

In der obigen YAML-Spezifikationsdatei:

  • Die Eigenschaft code definiert den relativen Pfad des Ordners, der eine parametrisierte titanic.py-Datei enthält.
  • die resource-Eigenschaft definiert den instance_type und die Apache Spark-Werte runtime_version, die von serverlosem Spark-Compute verwendet werden. Diese Werte für Instanztypen werden derzeit unterstützt:
    • standard_e4s_v3
    • standard_e8s_v3
    • standard_e16s_v3
    • standard_e32s_v3
    • standard_e64s_v3

Die gezeigte YAML-Dateie kann im Befehl az ml job create mit dem Parameter --file verwendet werden, um einen eigenständigen Spark-Auftrag wie dargestellt zu erstellen:

az ml job create --file <YAML_SPECIFICATION_FILE_NAME>.yaml --subscription <SUBSCRIPTION_ID> --resource-group <RESOURCE_GROUP> --workspace-name <AML_WORKSPACE_NAME>

Tipp

Möglicherweise verfügen Sie über einen vorhandenen Synapse Spark-Pool in Ihrem Azure Synapse-Arbeitsbereich. Wenn Sie einen vorhandenen Synapse Spark-Pool verwenden möchten, befolgen Sie die Anweisungen zum Anfügen eines Synapse Spark-Pools in einen Azure Machine Learning-Arbeitsbereich.

Nächste Schritte