Arbeiten mit Tabellen in Azure Machine Learning

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

Azure Machine Learning unterstützt einen Tabellentyp (mltable). Dies ermöglicht die Erstellung einer Blaupause, die definiert, wie Datendateien als Pandas- oder Spark-Datenrahmen in den Arbeitsspeicher geladen werden. In diesem Artikel wird Folgendes behandelt:

  • Verwenden von Azure Machine Learning-Tabellen anstelle von Dateien oder Ordnern
  • Installieren des mltable SDKs
  • Definieren einer Blaupause zum Laden von Daten mithilfe einer mltable-Datei
  • Beispiele für die Verwendung von mltable in Azure Machine Learning
  • Verwenden von mltable während der interaktiven Entwicklung (z. B. in einem Notebook)

Voraussetzungen

Wichtig

Vergewissern Sie sich, dass Sie das neueste mltable-Paket in Ihrer Python-Umgebung installiert haben:

pip install -U mltable azureml-dataprep[pandas]

Klonen des Beispielrepositorys

Die Codeschnipsel in diesem Artikel basieren auf Beispielen aus dem GitHub-Repository mit Azure Machine Learning-Beispielen. Verwenden Sie den folgenden Befehl, um das Repository in Ihrer Entwicklungsumgebung zu klonen:

git clone --depth 1 https://github.com/Azure/azureml-examples

Tipp

Verwenden Sie --depth 1, um nur den letzten Commit in das Repository zu klonen. Dadurch wird die zum Abschließen des Vorgangs erforderliche Zeit reduziert.

Sie finden die für Azure Machine Learning-Tabellen relevanten Beispiele in diesem Ordner des Klonrepositorys:

cd azureml-examples/sdk/python/using-mltable

Einführung

Mit Azure Machine Learning-Tabellen (mltable) können Sie definieren, wie Sie Ihre Datendateien als Pandas- und/oder Spark-Datenrahmen in den Arbeitsspeicher laden möchten. Tabellen haben zwei wichtige Features:

  1. Eine MLTable-Datei. Eine YAML-basierte Datei, die die Blaupause für das Laden von Daten definiert. In der MLTable-Datei können Sie Folgendes angeben:
    • Die Speicherorte der Daten: lokal, in der Cloud oder auf einem öffentlichen HTTP(S)-Server.
    • Globmuster über Cloudspeicher. Diese Speicherorte können Sätze von Dateinamen mit Platzhalterzeichen (*) angeben.
    • Lesetransformation – Beispielsweise der Dateiformattyp (durch Trennzeichen getrennter Text, Parquet, Delta, JSON), Trennzeichen, Header usw.
    • Spaltentypkonvertierungen (zum Erzwingen des Schemas).
    • Erstellung neuer Spalten mithilfe von Ordnerstrukturinformationen, z. B. Erstellung einer Jahres- und Monatsspalte mithilfe der {year}/{month}-Ordnerstruktur im Pfad
    • Teilmengen der zu ladenden Daten – Beispielsweise Zeilen filtern, Spalten beibehalten/löschen, zufällige Stichproben entnehmen.
  2. Eine schnelle und effiziente Engine zum Laden der Daten in einem Pandas- oder Spark-Datenrahmen gemäß der in der MLTable-Datei definierten Blaupause. Die Engine basiert auf Rust, um eine hohe Geschwindigkeit und Speichereffizienz zu erreichen.

Azure Machine Learning-Tabellen sind in diesen Szenarien nützlich:

  • Sie müssen das Globbing über Speicherorte durchführen.
  • Sie müssen eine Tabelle mit Daten aus verschiedenen Speicherorten (z. B. verschiedenen Blobcontainern) erstellen.
  • Der Pfad enthält relevante Informationen, die Sie in Ihren Daten erfassen sollten (z. B. Datum und Uhrzeit).
  • Das Datenschema ändert sich häufig.
  • Sie möchten, dass die Schritte zum Laden Ihrer Daten leicht reproduzierbar sind.
  • Sie brauchen nur eine Teilmenge der großen Datenmenge.
  • Ihre Daten enthalten Speicherorte, die Sie in Ihre Python-Sitzung streamen möchten. Beispielsweise möchten Sie path in die folgende JSON-Zeilenstruktur streamen: [{"path": "abfss://fs@account.dfs.core.windows.net/my-images/cats/001.jpg", "label":"cat"}].
  • Sie möchten ML-Modelle mithilfe von Azure Machine Learning AutoML trainieren.

Tipp

Azure Machine Learning erfordert keine Verwendung von Azure Machine Learning-Tabellen (mltable) für Tabellendaten. Sie können die Azure Machine Learning-Typen „Datei“ (uri_file) und „Ordner“ (uri_folder) verwenden und Ihre eigene Analyselogik lädt dann die Daten in einen Pandas- oder Spark-Datenrahmen.

Für eine einfache CSV-Datei oder einen Parquet-Ordner ist es einfacher, Azure Machine Learning-Dateien/-Ordner statt Tabellen zu verwenden.

Schnellstart für Azure Machine Learning-Tabellen

In dieser Schnellstartanleitung erstellen Sie eine Tabelle (mltable) der Daten zu grünen Taxis in New York aus Azure Open Datasets. Die Daten liegen im Parquet-Format vor und umfassen die Jahre 2008-2021. In einem öffentlich zugänglichen Blobspeicherkonto verfügen die Datendateien über diese Ordnerstruktur:

/
└── green
    ├── puYear=2008
    │   ├── puMonth=1
    │   │   ├── _committed_2983805876188002631
    │   │   └── part-XXX.snappy.parquet
    │   ├── ...
    │   └── puMonth=12
    │       ├── _committed_2983805876188002631
    │       └── part-XXX.snappy.parquet
    ├── ...
    └── puYear=2021
        ├── puMonth=1
        │   ├── _committed_2983805876188002631
        │   └── part-XXX.snappy.parquet
        ├── ...
        └── puMonth=12
            ├── _committed_2983805876188002631
            └── part-XXX.snappy.parquet

Mit diesen Daten müssen Sie Folgendes in einen Pandas-Datenrahmen laden:

  • Nur die Parquet-Dateien für die Jahre 2015-2019
  • Eine zufällige Stichprobe der Daten
  • Nur Zeilen mit einem RIP-Abstand größer als 0
  • Relevante Spalten für Machine Learning
  • Neue Spalten – Jahr und Monat – unter Verwendung der Pfadinformationen (puYear=X/puMonth=Y)

Der Pandas-Code übernimmt dies. Das Erreichen der Reproduzierbarkeit würde jedoch schwierig werden, da Sie eine der folgenden Optionen durchführen müssen:

  • Freigeben von Code, d. h. bei Schemaänderungen (z. B. einer Änderung von Spaltennamen) müssen alle Benutzer ihren Code aktualisieren
  • Schreiben einer ETL-Pipeline, was mit hohem Mehraufwand verbunden ist

Azure Machine Learning-Tabellen bieten einen unkomplizierten Mechanismus zum Serialisieren (Speichern) der Schritte zum Laden von Daten in einer MLTable-Datei. Anschließend können Sie und Mitglieder Ihres Teams den Pandas-Datenrahmen reproduzieren. Wenn sich das Schema ändert, aktualisieren Sie nur die MLTable-Datei, anstatt Aktualisierungen an vielen Stellen vorzunehmen, die Python-Code zum Laden von Daten erfordern.

Klonen des Schnellstartnotebooks oder Erstellen eines neuen Notebooks/Skripts

Wenn Sie eine Azure Machine Learning-Compute-Instanz verwenden, erstellen Sie ein neues Notebook. Wenn Sie eine integrierte Entwicklungsumgebung verwenden, sollten Sie ein neues Python-Skript erstellen.

Darüber hinaus ist das Schnellstartnotebook im GitHub-Repository für Azure Machine Learning-Beispiele verfügbar. Verwenden Sie diesen Code, um das Notebook zu klonen und darauf zuzugreifen:

git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/sdk/python/using-mltable/quickstart

Installieren des mltable-Python SDK

Um die Daten der grünen Taxis in New York in eine Azure Machine Learning-Tabelle zu laden, müssen Sie das mltable-Python SDK und pandas mit dem folgenden Befehl in Ihrer Python-Umgebung installiert haben:

pip install -U mltable azureml-dataprep[pandas]

Erstellen einer MLTable-Datei

Verwenden Sie das mltable-Python SDK zum Erstellen einer MLTable-Datei, um die Blaupause zum Laden von Daten zu dokumentieren. Kopieren Sie dazu den folgenden Code, und fügen Sie ihn in Ihr Notebook/Skript ein. Führen Sie dann den folgenden Code aus:

import mltable

# glob the parquet file paths for years 2015-19, all months.
paths = [
    {
        "pattern": "wasbs://nyctlc@azureopendatastorage.blob.core.windows.net/green/puYear=2015/puMonth=*/*.parquet"
    },
    {
        "pattern": "wasbs://nyctlc@azureopendatastorage.blob.core.windows.net/green/puYear=2016/puMonth=*/*.parquet"
    },
    {
        "pattern": "wasbs://nyctlc@azureopendatastorage.blob.core.windows.net/green/puYear=2017/puMonth=*/*.parquet"
    },
    {
        "pattern": "wasbs://nyctlc@azureopendatastorage.blob.core.windows.net/green/puYear=2018/puMonth=*/*.parquet"
    },
    {
        "pattern": "wasbs://nyctlc@azureopendatastorage.blob.core.windows.net/green/puYear=2019/puMonth=*/*.parquet"
    },
]

# create a table from the parquet paths
tbl = mltable.from_parquet_files(paths)

# table a random sample
tbl = tbl.take_random_sample(probability=0.001, seed=735)

# filter trips with a distance > 0
tbl = tbl.filter("col('tripDistance') > 0")

# Drop columns
tbl = tbl.drop_columns(["puLocationId", "doLocationId", "storeAndFwdFlag"])

# Create two new columns - year and month - where the values are taken from the path
tbl = tbl.extract_columns_from_partition_format("/puYear={year}/puMonth={month}")

# print the first 5 records of the table as a check
tbl.show(5)

Sie können optional auswählen, ob Sie das MLTable-Objekt in Pandas laden möchten, indem Sie wie folgt vorgehen:

# You can load the table into a pandas dataframe
# NOTE: The data is in East US region and the data is large, so this will take several minutes (~7mins)
# to load if you are in a different region.

# df = tbl.to_pandas_dataframe()

Speichern der Schritte zum Laden von Daten

Speichern Sie als nächstes alle Schritte zum Laden Ihrer Daten in einer MLTable-Datei. Wenn Sie die Schritte zum Laden der Daten in einer MLTable-Datei speichern, können Sie Ihren Pandas-Datenrahmen zu einem späteren Zeitpunkt reproduzieren, ohne den Code jedes Mal neu definieren zu müssen.

Sie können die MLTable-YAML-Datei in einer Cloudspeicherressource oder in lokalen Pfadressourcen speichern.

# save the data loading steps in an MLTable file to a cloud storage resource
# NOTE: the tbl object was defined in the previous snippet.
tbl.save(path="azureml://subscriptions/<subid>/resourcegroups/<rgname>/workspaces/<wsname>/datastores/<name>/paths/titanic", colocated=True, show_progress=True, overwrite=True)
# save the data loading steps in an MLTable file to a local resource
# NOTE: the tbl object was defined in the previous snippet.
tbl.save("./titanic")

Wichtig

  • Wenn „collocated == True“: Wir kopieren die Daten in denselben Ordner, in dem sich auch die MLTable-YAML-Datei befindet, wenn derzeit nicht derselbe Speicherort verwendet wird. Außerdem verwenden wir relative Pfade in der MLTable-YAML-Datei.
  • Wenn „collocated == False“: Wir verschieben die Daten nicht, und wir verwenden absolute Pfade für Clouddaten und relative Pfade für lokale Daten.
  • Folgende Parameterkombination wird nicht unterstützt: Daten werden in einer lokalen Ressource gespeichert, „collocated == False“, path haben als Ziel ein Cloudverzeichnis. Laden Sie stattdessen Ihre lokalen Daten in die Cloud hoch, und verwenden Sie die Clouddatenpfade für MLTable.

Reproduzieren von Schritten zum Laden von Daten

Nachdem Sie die Schritte zum Laden der Daten in eine Datei serialisiert haben, können Sie sie zu jedem beliebigen Zeitpunkt mit der Methode load() reproduzieren. Auf diese Weise müssen Sie die Schritte zum Laden der Daten nicht im Code neu definieren und können die Datei leichter freigeben.

import mltable

# load the previously saved MLTable file
tbl = mltable.load("./nyc_taxi/")
tbl.show(5)

# You can load the table into a pandas dataframe
# NOTE: The data is in East US region and the data is large, so this will take several minutes (~7mins)
# to load if you are in a different region.

# load the table into pandas
# df = tbl.to_pandas_dataframe()

# print the head of the data frame
# df.head()
# print the shape and column types of the data frame
# print(f"Shape: {df.shape}")
# print(f"Columns:\n{df.dtypes}")

Erstellen einer Datenressource zur Unterstützung der Freigabe und Reproduzierbarkeit

Ihre MLTable-Datei wird derzeit auf dem Datenträger gespeichert, was die Freigabe für Teammitglieder erschwert. Wenn Sie eine Datenressource in Azure Machine Learning erstellen, wird Ihre MLTable in den Cloudspeicher hochgeladen und mit einem „Lesezeichen“ versehen. Ihre Teammitglieder können dann mithilfe eines Anzeigenamens auf die MLTable zugreifen. Außerdem verfügt die Ressource über eine Versionsangabe.

az ml data create --name green-quickstart --version 1 --path ./nyc_taxi --type mltable

Hinweis

Der Pfad verweist auf den Ordner, der die MLTable-Datei enthält.

Lesen der Datenressource in einer interaktiven Sitzung

Nachdem Sie Ihre MLTable jetzt in der Cloud gespeichert haben, können Sie und Ihre Teammitglieder in einer interaktiven Sitzung (z. B. in einem Notebook) mit einem Anzeigenamen darauf zugreifen:

import mltable
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

# connect to the AzureML workspace
# NOTE: the subscription_id, resource_group, workspace variables are set
# in a previous code snippet.
ml_client = MLClient(
    DefaultAzureCredential(), subscription_id, resource_group, workspace
)

# get the latest version of the data asset
# Note: The version was set in the previous snippet. If you changed the version
# number, update the VERSION variable below.
VERSION="1"
data_asset = ml_client.data.get(name="green-quickstart", version=VERSION)

# create a table
tbl = mltable.load(f"azureml:/{data_asset.id}")
tbl.show(5)

# load into pandas
# NOTE: The data is in East US region and the data is large, so this will take several minutes (~7mins) to load if you are in a different region.
df = tbl.to_pandas_dataframe()

Lesen der Datenressource in einem Auftrag

Wenn Sie oder ein Teammitglied auf die Tabelle in einem Auftrag zugreifen möchten, sollte Ihr Python-Trainingsskript Folgendes enthalten:

# ./src/train.py
import argparse
import mltable

# parse arguments
parser = argparse.ArgumentParser()
parser.add_argument('--input', help='mltable to read')
args = parser.parse_args()

# load mltable
tbl = mltable.load(args.input)

# load into pandas
df = tbl.to_pandas_dataframe()

Ihr Auftrag benötigt eine Conda-Datei, die die Python-Paketabhängigkeiten enthält:

# ./conda_dependencies.yml
dependencies:
  - python=3.10
  - pip=21.2.4
  - pip:
      - mltable
      - azureml-dataprep[pandas]

Sie würden den Auftrag wie folgt übermitteln:

Erstellen Sie die folgende YAML-Auftragsdatei:

# mltable-job.yml
$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json

code: ./src

command: python train.py --input ${{inputs.green}}
inputs:
    green:
      type: mltable
      path: azureml:green-quickstart:1

compute: cpu-cluster

environment:
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04
  conda_file: conda_dependencies.yml

Erstellen Sie in der CLI den Auftrag:

az ml job create -f mltable-job.yml

Erstellen von MLTable-Dateien

Um die MLTable-Datei direkt zu erstellen, sollten Sie das mltable-Python SDK anstelle eines Text-Editors verwenden, um Ihre MLTable-Dateien zu erstellen, wie im Schnellstart für Azure Machine Learning-Tabellen gezeigt. In diesem Abschnitt werden die Funktionen im mltable-Python SDK beschrieben.

Unterstützte Dateitypen

Sie können eine MLTable mit verschiedenen Dateitypen erstellen:

Dateityp MLTable-Python SDK
Durch Trennzeichen getrennter Text
(z. B. CSV-Dateien)
from_delimited_files(paths=[path])
Parquet from_parquet_files(paths=[path])
Delta Lake from_delta_lake(delta_table_uri=<uri_pointing_to_delta_table_directory>,timestamp_as_of='2022-08-26T00:00:00Z')
JSON-Zeilen from_json_lines_files(paths=[path])
Paths
(Erstellen einer Tabelle mit einer Spalte von zu streamenden Pfaden)
from_paths(paths=[path])

Weitere Informationen finden Sie in der MLTable-Referenzressource.

Definieren von Pfaden

Definieren Sie für Text mit Trennzeichen, Parquet, JSON-Zeilen und Pfade eine Liste von Python-Wörterbüchern, die die Pfade definiert, aus denen gelesen werden soll:

import mltable

# A List of paths to read into the table. The paths are a python dict that define if the path is
# a file, folder, or (glob) pattern.
paths = [
    {
        "file": "<supported_path>"
    }
]

tbl = mltable.from_delimited_files(paths=paths)

# alternatively
# tbl = mltable.from_parquet_files(paths=paths)
# tbl = mltable.from_json_lines_files(paths=paths)
# tbl = mltable.from_paths(paths=paths)

MLTable unterstützt diese Pfadtypen:

Standort Beispiele
Ein Pfad auf Ihrem lokalen Computer ./home/username/data/my_data
Ein Pfad auf einem öffentlichen HTTP(S)-Server https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv
Ein Pfad in Azure Storage wasbs://<container_name>@<account_name>.blob.core.windows.net/<path>
abfss://<file_system>@<account_name>.dfs.core.windows.net/<path>
Azure Machine Learning-Datenspeicher in Langform azureml://subscriptions/<subid>/resourcegroups/<rgname>/workspaces/<wsname>/datastores/<name>/paths/<path>

Hinweis

mltable führt einen Passthrough der Anmeldeinformationen für Pfade in Azure Storage- und Azure Machine Learning-Datenspeichern durch. Wenn Sie nicht über die Berechtigung für die Daten im zugrunde liegenden Speicher verfügen, können Sie nicht auf die Daten zugreifen.

Hinweis zum Definieren von Pfaden für Delta Lake-Tabellen

Das Definieren von Pfaden zum Lesen von Delta Lake-Tabellen unterscheidet sich von den anderen Dateitypen. Bei Delta Lake-Tabellen zeigt der Pfad auf einen einzelnen Ordner (in der Regel in ADLS Gen2), der die den Ordner „_delta_log“ und Datendateien enthält. Zeitreisen werden unterstützt. Der folgende Code zeigt, wie Sie einen Pfad für eine Delta Lake-Tabelle definieren:

import mltable

# define the cloud path containing the delta table (where the _delta_log file is stored)
delta_table = "abfss://<file_system>@<account_name>.dfs.core.windows.net/<path_to_delta_table>"

# create an MLTable. Note the timestamp_as_of parameter for time travel.
tbl = mltable.from_delta_lake(
    delta_table_uri=delta_table,
    timestamp_as_of='2022-08-26T00:00:00Z'
)

Um die neueste Version von Delta Lake-Daten abzurufen, können Sie den aktuellen Zeitstempel an timestamp_as_of übergeben.

import mltable

# define the relative path containing the delta table (where the _delta_log file is stored)
delta_table_path = "./working-directory/delta-sample-data"

# get the current timestamp in the required format
current_timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
print(current_timestamp)
tbl = mltable.from_delta_lake(delta_table_path, timestamp_as_of=current_timestamp)
df = tbl.to_pandas_dataframe()

Wichtig

Einschränkung:mltable unterstützt nicht Extrahieren von Partitionsschlüsseln beim Lesen von Daten aus Delta Lake. Die mltable-Transformation extract_columns_from_partition_format funktioniert nicht, wenn Sie Delta Lake-Daten über mltable lesen.

Wichtig

mltable führt einen Passthrough der Anmeldeinformationen für Pfade in Azure Storage- und Azure Machine Learning-Datenspeichern durch. Wenn Sie nicht über die Berechtigung für die Daten im zugrunde liegenden Speicher verfügen, können Sie nicht auf die Daten zugreifen.

Dateien, Ordner und Globs

Azure Machine Learning-Tabellen unterstützen das Lesen aus:

  • Dateien, z. B. abfss://<file_system>@<account_name>.dfs.core.windows.net/my-csv.csv
  • Ordnern, z. B. abfss://<file_system>@<account_name>.dfs.core.windows.net/my-folder/
  • Globmustern, z. B. abfss://<file_system>@<account_name>.dfs.core.windows.net/my-folder/*.csv
  • einer Kombination aus Dateien, Ordnern und Globmustern

Unterstützte Transformationen zum Laden von Daten

Vollständige, aktuelle Details zu den unterstützten Transformationen zum Laden von Daten finden Sie in der MLTable-Referenzdokumentation.

Beispiele

Die Beispiele im GitHub-Repository für Azure Machine Learning dienten als Grundlage für die Codeschnipsel in diesem Artikel. Verwenden Sie den folgenden Befehl, um das Repository in Ihre Entwicklungsumgebung zu klonen:

git clone --depth 1 https://github.com/Azure/azureml-examples

Tipp

Verwenden Sie --depth 1, um nur den letzten Commit in das Repository zu klonen. Dadurch wird die zum Abschließen des Vorgangs erforderliche Zeit reduziert.

Dieser Ordner zum Klonen des Repositorys enthält die für Azure Machine Learning-Tabellen relevanten Beispiele:

cd azureml-examples/sdk/python/using-mltable

Durch Trennzeichen getrennte Dateien

Erstellen Sie zunächst eine MLTable aus einer CSV-Datei mit folgendem Code:

import mltable
from mltable import MLTableHeaders, MLTableFileEncoding, DataType

# create paths to the data files
paths = [{"file": "wasbs://data@azuremlexampledata.blob.core.windows.net/titanic.csv"}]

# create an MLTable from the data files
tbl = mltable.from_delimited_files(
    paths=paths,
    delimiter=",",
    header=MLTableHeaders.all_files_same_headers,
    infer_column_types=True,
    include_path_column=False,
    encoding=MLTableFileEncoding.utf8,
)

# filter out rows undefined ages
tbl = tbl.filter("col('Age') > 0")

# drop PassengerId
tbl = tbl.drop_columns(["PassengerId"])

# ensure survived column is treated as boolean
data_types = {
    "Survived": DataType.to_bool(
        true_values=["True", "true", "1"], false_values=["False", "false", "0"]
    )
}
tbl = tbl.convert_column_types(data_types)

# show the first 5 records
tbl.show(5)

# You can also load into pandas...
# df = tbl.to_pandas_dataframe()
# df.head(5)

Speichern der Schritte zum Laden von Daten

Speichern Sie als nächstes alle Schritte zum Laden Ihrer Daten in einer MLTable-Datei. Wenn Sie die Schritte zum Laden der Daten in einer MLTable-Datei speichern, können Sie Ihren Pandas-Datenrahmen zu einem späteren Zeitpunkt reproduzieren, ohne den Code jedes Mal neu definieren zu müssen.

# save the data loading steps in an MLTable file
# NOTE: the tbl object was defined in the previous snippet.
tbl.save("./titanic")

Reproduzieren von Schritten zum Laden von Daten

Nachdem die Datei jetzt die Schritte zum Laden der serialisierten Daten enthält, können Sie diese zu jedem beliebigen Zeitpunkt mit der Methode load() reproduzieren. Auf diese Weise müssen Sie die Schritte zum Laden der Daten nicht im Code neu definieren und können die Datei leichter freigeben.

import mltable

# load the previously saved MLTable file
tbl = mltable.load("./titanic/")

Erstellen einer Datenressource zur Unterstützung der Freigabe und Reproduzierbarkeit

Ihre MLTable-Datei wird derzeit auf dem Datenträger gespeichert, was die Freigabe für Teammitglieder erschwert. Wenn Sie eine Datenressource in Azure Machine Learning erstellen, wird Ihre MLTable in den Cloudspeicher hochgeladen und mit Lesezeichen versehen. Ihre Teammitglieder können dann mit einem Anzeigenamen auf die MLTable zugreifen. Außerdem verfügt die Ressource über eine Versionsangabe.

import time
from azure.ai.ml import MLClient
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
from azure.identity import DefaultAzureCredential

# Update with your details...
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AML_WORKSPACE_NAME>"

# set the version number of the data asset to the current UTC time
VERSION = time.strftime("%Y.%m.%d.%H%M%S", time.gmtime())

# connect to the AzureML workspace
ml_client = MLClient(
    DefaultAzureCredential(), subscription_id, resource_group, workspace
)

my_data = Data(
    path="./titanic",
    type=AssetTypes.MLTABLE,
    description="The titanic dataset.",
    name="titanic-cloud-example",
    version=VERSION,
)

ml_client.data.create_or_update(my_data)

Nachdem Sie Ihre MLTable jetzt in der Cloud gespeichert haben, können Sie und Ihre Teammitglieder in einer interaktiven Sitzung (z. B. in einem Notebook) mit einem Anzeigenamen darauf zugreifen:

import mltable
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

# connect to the AzureML workspace
# NOTE:  subscription_id, resource_group, workspace were set in a previous snippet.
ml_client = MLClient(
    DefaultAzureCredential(), subscription_id, resource_group, workspace
)

# get the latest version of the data asset
# Note: The version was set in the previous code cell.
data_asset = ml_client.data.get(name="titanic-cloud-example", version=VERSION)

# create a table
tbl = mltable.load(f"azureml:/{data_asset.id}")

# load into pandas
df = tbl.to_pandas_dataframe()
df.head(5)

Sie können auch ganz einfach auf die Datenressource in einem Auftrag zugreifen.

Parquet-Dateien

Im Schnellstart für Azure Machine Learning-Tabellen erfahren Sie, wie Sie Parquet-Dateien lesen können.

Pfade: Erstellen einer Tabelle mit Bilddateien

Sie können eine Tabelle erstellen, die die Pfade im Cloudspeicher enthält. In diesem Beispiel befinden sich mehrere Hunde- und Katzenbilder im Cloudspeicher, und zwar in der folgenden Ordnerstruktur:

/pet-images
  /cat
    0.jpeg
    1.jpeg
    ...
  /dog
    0.jpeg
    1.jpeg

mltable kann eine Tabelle erstellen, die die Speicherpfade dieser Bilder und ihre Ordnernamen (Bezeichnungen) enthält, die zum Streamen der Bilder verwendet werden können. Mit diesem Code wird die MLTable erstellt, die Folgendes bewirkt:

import mltable

# create paths to the data files
paths = [{"pattern": "wasbs://data@azuremlexampledata.blob.core.windows.net/pet-images/**/*.jpg"}]

# create the mltable
tbl = mltable.from_paths(paths)

# extract useful information from the path
tbl = tbl.extract_columns_from_partition_format("{account}/{container}/{folder}/{label}")

tbl = tbl.drop_columns(["account", "container", "folder"])

df = tbl.to_pandas_dataframe()
print(df.head())

# save the data loading steps in an MLTable file
tbl.save("./pets")

Dieser Code zeigt, wie Sie den Speicherort im Pandas-Datenrahmen öffnen und die Bilder plotten:

# plot images on a grid. Note this takes ~1min to execute.
import matplotlib.pyplot as plt
from PIL import Image

fig = plt.figure(figsize=(20, 20))
columns = 4
rows = 5
for i in range(1, columns*rows +1):
    with df.Path[i].open() as f:
        img = Image.open(f)
        fig.add_subplot(rows, columns, i)
        plt.imshow(img)
        plt.title(df.label[i])

Erstellen einer Datenressource zur Unterstützung der Freigabe und Reproduzierbarkeit

Ihre mltable-Datei wird derzeit auf dem Datenträger gespeichert, was die Freigabe für Teammitglieder erschwert. Wenn Sie eine Datenressource in Azure Machine Learning erstellen, wird die mltable in den Cloudspeicher hochgeladen und mit Lesezeichen versehen. Ihre Teammitglieder können dann mit einem Anzeigenamen auf die mltable zugreifen. Außerdem verfügt die Ressource über eine Versionsangabe.

import time
from azure.ai.ml import MLClient
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
from azure.identity import DefaultAzureCredential

# set the version number of the data asset to the current UTC time
VERSION = time.strftime("%Y.%m.%d.%H%M%S", time.gmtime())

# connect to the AzureML workspace
# NOTE: subscription_id, resource_group, workspace were set in a previous snippet.
ml_client = MLClient(
    DefaultAzureCredential(), subscription_id, resource_group, workspace
)

my_data = Data(
    path="./pets",
    type=AssetTypes.MLTABLE,
    description="A sample of cat and dog images",
    name="pets-mltable-example",
    version=VERSION,
)

ml_client.data.create_or_update(my_data)

Nachdem Sie mltable jetzt in der Cloud gespeichert haben, können Sie und Ihre Teammitglieder in einer interaktiven Sitzung (z. B. in einem Notebook) mit einem Anzeigenamen darauf zugreifen:

import mltable
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

# connect to the AzureML workspace
# NOTE: subscription_id, resource_group, workspace were set in a previous snippet.
ml_client = MLClient(
    DefaultAzureCredential(), subscription_id, resource_group, workspace
)

# get the latest version of the data asset
# Note: the variable VERSION is set in the previous code
data_asset = ml_client.data.get(name="pets-mltable-example", version=VERSION)

# the table from the data asset id
tbl = mltable.load(f"azureml:/{data_asset.id}")

# load into pandas
df = tbl.to_pandas_dataframe()
df.head()

Sie können die Daten auch in Ihren Auftrag laden.

Nächste Schritte