Werken met tabellen in Azure Machine Learning

VAN TOEPASSING OP:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

Azure Machine Learning ondersteunt een tabeltype (mltable). Hiermee kunt u een blauwdruk maken waarmee wordt gedefinieerd hoe u gegevensbestanden in het geheugen laadt als een Pandas- of Spark-gegevensframe. In dit artikel leert u het volgende:

  • Wanneer u Azure Machine Learning-tabellen gebruikt in plaats van bestanden of mappen
  • De mltable SDK installeren
  • Een blauwdruk voor het laden van gegevens definiëren met behulp van een mltable bestand
  • Voorbeelden die laten zien hoe mltable wordt gebruikt in Azure Machine Learning
  • De functie gebruiken mltable tijdens interactieve ontwikkeling (bijvoorbeeld in een notebook)

Vereisten

Belangrijk

Zorg ervoor dat het meest recente mltable pakket is geïnstalleerd in uw Python-omgeving:

pip install -U mltable azureml-dataprep[pandas]

De opslagplaats met voorbeelden klonen

De codefragmenten in dit artikel zijn gebaseerd op voorbeelden in de GitHub-opslagplaats voor Azure Machine Learning-voorbeelden. Gebruik deze opdracht om de opslagplaats te klonen naar uw ontwikkelomgeving:

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

Tip

Gebruik --depth 1 dit om alleen de meest recente doorvoering naar de opslagplaats te klonen. Dit vermindert de tijd die nodig is om de bewerking te voltooien.

U vindt voorbeelden die relevant zijn voor Azure Machine Learning-tabellen in deze map van de gekloonde opslagplaats:

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

Inleiding

Met Azure Machine Learning-tabellen (mltable) kunt u definiëren hoe u uw gegevensbestanden wilt laden in het geheugen, als een Pandas- en/of Spark-gegevensframe. Tabellen hebben twee belangrijke functies:

  1. Een MLTable-bestand. Een YAML-bestand dat de blauwdruk voor het laden van gegevens definieert. In het MLTable-bestand kunt u het volgende opgeven:
    • De opslaglocatie of -locaties van de gegevens: lokaal, in de cloud of op een openbare HTTP-server(s).
    • Globbing-patronen over cloudopslag. Deze locaties kunnen sets bestandsnamen opgeven, met jokertekens (*).
    • leestransformatie : bijvoorbeeld het type bestandsindeling (tekst met scheidingstekens, Parquet, Delta, json), scheidingstekens, kopteksten, enzovoort.
    • Conversies van kolomtypen (om schema af te dwingen).
    • Nieuwe kolom maken, met informatie over mapstructuur, bijvoorbeeld het maken van een jaar- en maandkolom, met behulp van de {year}/{month} mapstructuur in het pad.
    • Subsets van gegevens die moeten worden geladen, bijvoorbeeld rijen filteren, kolommen behouden/neerzetten, willekeurige voorbeelden nemen.
  2. Een snelle en efficiënte engine voor het laden van de gegevens in een Pandas- of Spark-dataframe, volgens de blauwdruk die is gedefinieerd in het MLTable-bestand. De motor is afhankelijk van Rust voor hoge snelheid en geheugenefficiëntie.

Azure Machine Learning-tabellen zijn handig in deze scenario's:

  • U moet over opslaglocaties globen .
  • U moet een tabel maken met behulp van gegevens uit verschillende opslaglocaties (bijvoorbeeld verschillende blobcontainers).
  • Het pad bevat relevante informatie die u wilt vastleggen in uw gegevens (bijvoorbeeld datum en tijd).
  • Het gegevensschema wordt regelmatig gewijzigd.
  • U wilt eenvoudig reproduceerbaarheid van de stappen voor het laden van gegevens.
  • U hebt alleen een subset met grote gegevens nodig.
  • Uw gegevens bevatten opslaglocaties die u wilt streamen naar uw Python-sessie. U wilt bijvoorbeeld streamen path in de volgende structuur van JSON-regels: [{"path": "abfss://fs@account.dfs.core.windows.net/my-images/cats/001.jpg", "label":"cat"}].
  • U wilt ML-modellen trainen met behulp van Azure Machine Learning AutoML.

Tip

Voor tabelgegevens is voor Azure Machine Learning geen gebruik van Azure Machine Learning-tabellen (mltable) vereist. U kunt typen Azure Machine Learning File () en Map (uri_fileuri_folder) gebruiken en uw eigen parseerlogica laadt de gegevens in een Pandas- of Spark-gegevensframe.

Voor een eenvoudig CSV-bestand of Een Parquet-map is het eenvoudiger om Azure Machine Learning Files/Folders te gebruiken in plaats van tabellen.

Quickstart voor Azure Machine Learning-tabellen

In deze quickstart maakt u een tabel (mltable) van de NYC Green Taxi-gegevens uit Azure Open Datasets. De gegevens hebben een parquet-indeling en hebben betrekking op de jaren 2008-2021. In een openbaar toegankelijk blob-opslagaccount hebben de gegevensbestanden deze mapstructuur:

/
└── 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

Met deze gegevens moet u laden in een Pandas-gegevensframe:

  • Alleen de parquet-bestanden voor jaren 2015-19
  • Een willekeurige steekproef van de gegevens
  • Alleen rijen met een ripafstand groter dan 0
  • Relevante kolommen voor Machine Learning
  • Nieuwe kolommen - jaar en maand - met behulp van de padinformatie (puYear=X/puMonth=Y)

Pandas-code verwerkt dit. Het bereiken van reproduceerbaarheid zou echter moeilijk worden, omdat u:

  • Deel code, wat betekent dat als het schema wordt gewijzigd (bijvoorbeeld een kolomnaam kan veranderen) alle gebruikers hun code moeten bijwerken
  • Een ETL-pijplijn schrijven, die veel overhead heeft

Azure Machine Learning-tabellen bieden een lichtgewicht mechanisme voor het serialiseren (opslaan) van de stappen voor het laden van gegevens in een MLTable bestand. Vervolgens kunnen u en leden van uw team het Pandas-gegevensframe reproduceren . Als het schema wordt gewijzigd, werkt u het MLTable bestand alleen bij in plaats van updates op veel plaatsen waarbij Python-code wordt geladen.

Het snelstartnotitieblok klonen of een nieuw notebook/script maken

Als u een Azure Machine Learning-rekenproces gebruikt, maakt u een nieuw notebook. Als u een IDE gebruikt, moet u een nieuw Python-script maken.

Daarnaast is het quickstart-notebook beschikbaar in de GitHub-opslagplaats met Azure Machine Learning-voorbeelden. Gebruik deze code om het notebook te klonen en te openen:

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

mltable De Python SDK installeren

Als u de NYC Green Taxi-gegevens wilt laden in een Azure Machine Learning-tabel, moet u de mltable Python SDK hebben en pandas in uw Python-omgeving zijn geïnstalleerd met deze opdracht:

pip install -U mltable azureml-dataprep[pandas]

Een MLTable-bestand maken

Gebruik de mltable Python SDK om een MLTable-bestand te maken om de blauwdruk voor het laden van gegevens te documenteren. Hiervoor kopieert en plakt u de volgende code in uw notebook/script en voert u die code uit:

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)

U kunt eventueel het MLTable-object in Pandas laden met behulp van:

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

De stappen voor het laden van gegevens opslaan

Sla vervolgens alle stappen voor het laden van gegevens op in een MLTable-bestand. Door de stappen voor het laden van gegevens op te slaan in een MLTable-bestand, kunt u uw Pandas-gegevensframe op een later tijdstip reproduceren, zonder dat u de code telkens opnieuw hoeft te definiëren.

U kunt het YAML-bestand van MLTable opslaan in een cloudopslagresource of u kunt het opslaan in lokale padresources.

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

Belangrijk

  • Als de locatie == Waar is, worden de gegevens gekopieerd naar dezelfde map met het YAML-bestand van MLTable als ze momenteel niet zijn geplaatst en gebruiken we relatieve paden in MLTable yaml.
  • Als de locatie == Onwaar is, worden de gegevens niet verplaatst, gebruiken we absolute paden voor cloudgegevens en gebruiken we relatieve paden voor lokale gegevens.
  • Deze parametercombinatie wordt niet ondersteund: gegevens worden opgeslagen in een lokale resource, geplaatst op == Onwaar, path is gericht op een cloudmap. Upload uw lokale gegevens naar de cloud en gebruik in plaats daarvan de cloudgegevenspaden voor MLTable.

Stappen voor het laden van gegevens reproduceren

Nu u de stappen voor het laden van gegevens in een bestand hebt geserialiseerd, kunt u deze op elk gewenst moment reproduceren met de methode load(). Op deze manier hoeft u de stappen voor het laden van gegevens in code niet opnieuw te definiëren en kunt u het bestand eenvoudiger delen.

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

Een gegevensasset maken om delen en reproduceerbaarheid te helpen

Mogelijk hebt u het MLTable-bestand opgeslagen op schijf, waardoor het moeilijk is om te delen met teamleden. Wanneer u een gegevensasset maakt in Azure Machine Learning, wordt uw MLTable geüpload naar cloudopslag en 'bladwijzers gemaakt'. Uw teamleden hebben vervolgens toegang tot de MLTable met een beschrijvende naam. De gegevensasset is ook geversied.

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

Notitie

Het pad verwijst naar de map die het MLTable bestand bevat.

De gegevensasset in een interactieve sessie lezen

Nu uw MLTable is opgeslagen in de cloud, hebben u en teamleden er toegang toe met een beschrijvende naam in een interactieve sessie (bijvoorbeeld een notebook):

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()

De gegevensasset in een taak lezen

Als u of een teamlid toegang wilt krijgen tot de tabel in een taak, bevat uw Python-trainingsscript het volgende:

# ./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()

Uw taak heeft een conda-bestand nodig dat de Afhankelijkheden van het Python-pakket bevat:

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

U verzendt de taak met behulp van:

Maak het volgende YAML-taakbestand:

# 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

Maak de taak in de CLI:

az ml job create -f mltable-job.yml

MLTable-bestanden ontwerpen

Als u het MLTable-bestand rechtstreeks wilt maken, raden we u aan de mltable Python SDK te gebruiken om uw MLTable-bestanden te ontwerpen, zoals wordt weergegeven in de quickstart voor Azure Machine Learning-tabellen, in plaats van een teksteditor. In deze sectie wordt een overzicht gegeven van de mogelijkheden in de mltable Python SDK.

Ondersteunde bestandstypen

U kunt een MLTable maken met een reeks verschillende bestandstypen:

Bestandssoort MLTable Python SDK
Tekst met scheidingstekens
(bijvoorbeeld CSV-bestanden)
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-lijnen from_json_lines_files(paths=[path])
Paden
(Maak een tabel met een kolom met paden die moeten worden gestreamd)
from_paths(paths=[path])

Lees de MLTable-referentieresource voor meer informatie

Paden definiëren

Definieer voor tekst met scheidingstekens, parquet, JSON-regels en -paden een lijst met Python-woordenlijsten waarmee het pad of de paden worden gedefinieerd waaruit u wilt lezen:

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 ondersteunt deze padtypen:

Locatie Voorbeelden
Een pad op uw lokale computer ./home/username/data/my_data
Een pad op een openbare HTTP(s)-server https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv
Een pad in Azure Storage wasbs://<container_name>@<account_name>.blob.core.windows.net/<path>
abfss://<file_system>@<account_name>.dfs.core.windows.net/<path>
Een azure Machine Learning-gegevensarchief met een lange vorm azureml://subscriptions/<subid>/resourcegroups/<rgname>/workspaces/<wsname>/datastores/<name>/paths/<path>

Notitie

mltable verwerkt passthrough voor gebruikersreferenties voor paden in Azure Storage en Azure Machine Learning-gegevensarchieven. Als u niet gemachtigd bent voor de gegevens in de onderliggende opslag, hebt u geen toegang tot de gegevens.

Een opmerking over het definiëren van paden voor Delta Lake-tabellen

In vergelijking met de andere bestandstypen is het definiëren van paden voor het lezen van Delta Lake-tabellen anders. Voor Delta Lake-tabellen verwijst het pad naar één map (meestal op ADLS Gen2) die de map '_delta_log' en gegevensbestanden bevat. tijdreizen worden ondersteund. De volgende code laat zien hoe u een pad definieert voor een Delta Lake-tabel:

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'
)

Als u de nieuwste versie van Delta Lake-gegevens wilt ophalen, kunt u de huidige tijdstempel doorgeven aan timestamp_as_of.

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()

Belangrijk

Beperking: mltable biedt geen ondersteuning voor partitiesleutelextractie bij het lezen van gegevens uit Delta Lake. De mltable transformatie extract_columns_from_partition_format werkt niet wanneer u Delta Lake-gegevens leest via mltable.

Belangrijk

mltable verwerkt passthrough voor gebruikersreferenties voor paden in Azure Storage en Azure Machine Learning-gegevensarchieven. Als u niet gemachtigd bent voor de gegevens in de onderliggende opslag, hebt u geen toegang tot de gegevens.

Bestanden, mappen en globs

Azure Machine Learning-tabellen ondersteunen het lezen van:

  • bestand(en), bijvoorbeeld: abfss://<file_system>@<account_name>.dfs.core.windows.net/my-csv.csv
  • map(en), bijvoorbeeld abfss://<file_system>@<account_name>.dfs.core.windows.net/my-folder/
  • globpatroon (en), bijvoorbeeld abfss://<file_system>@<account_name>.dfs.core.windows.net/my-folder/*.csv
  • een combinatie van bestanden, mappen en globbing-patronen

Ondersteunde transformaties voor het laden van gegevens

Zoek volledige, actuele details van de ondersteunde transformaties voor het laden van gegevens in de mlTable-referentiedocumentatie.

Voorbeelden

Voorbeelden in de GitHub-opslagplaats voor Azure Machine Learning-voorbeelden zijn de basis geworden voor de codefragmenten in dit artikel. Gebruik deze opdracht om de opslagplaats te klonen naar uw ontwikkelomgeving:

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

Tip

Gebruik --depth 1 dit om alleen de meest recente doorvoering naar de opslagplaats te klonen. Dit vermindert de tijd die nodig is om de bewerking te voltooien.

Deze kloonopslagplaatsmap fungeert als host voor de voorbeelden die relevant zijn voor Azure Machine Learning-tabellen:

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

Bestanden met scheidingstekens

Maak eerst een MLTable op basis van een CSV-bestand met deze 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)

De stappen voor het laden van gegevens opslaan

Sla vervolgens alle stappen voor het laden van gegevens op in een MLTable-bestand. Wanneer u de stappen voor het laden van gegevens in een MLTable-bestand opslaat, kunt u uw Pandas-gegevensframe op een later tijdstip reproduceren, zonder dat u de code telkens opnieuw hoeft te definiëren.

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

Stappen voor het laden van gegevens reproduceren

Nu het bestand de stappen voor het laden van geserialiseerde gegevens bevat, kunt u ze op elk gewenst moment reproduceren met de load() methode. Op deze manier hoeft u de stappen voor het laden van gegevens in code niet opnieuw te definiëren en kunt u het bestand eenvoudiger delen.

import mltable

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

Een gegevensasset maken om delen en reproduceerbaarheid te helpen

Mogelijk hebt u het MLTable-bestand opgeslagen op schijf, waardoor het moeilijk is om te delen met teamleden. Wanneer u een gegevensasset maakt in Azure Machine Learning, wordt uw MLTable geüpload naar cloudopslag en 'bladwijzers gemaakt'. Uw teamleden hebben vervolgens toegang tot de MLTable met een beschrijvende naam. De gegevensasset is ook geversied.

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)

Nu uw MLTable is opgeslagen in de cloud, hebben u en teamleden er toegang toe met een beschrijvende naam in een interactieve sessie (bijvoorbeeld een notebook):

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)

U kunt ook eenvoudig toegang krijgen tot de gegevensasset in een taak.

Parquet-bestanden

In de quickstart voor Azure Machine Learning-tabellen wordt uitgelegd hoe u parquet-bestanden kunt lezen.

Paden: Een tabel met afbeeldingsbestanden maken

U kunt een tabel maken met de paden in cloudopslag. In dit voorbeeld bevinden zich verschillende afbeeldingen van honden en katten in de cloudopslag, in de volgende mapstructuur:

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

Hiermee mltable kunt u een tabel maken die de opslagpaden van deze afbeeldingen en de mapnamen (labels) bevat, die kunnen worden gebruikt om de afbeeldingen te streamen. Met deze code maakt u de MLTable:

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

Deze code laat zien hoe u de opslaglocatie opent in het Pandas-gegevensframe en de afbeeldingen tekent:

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

Een gegevensasset maken om delen en reproduceerbaarheid te helpen

Mogelijk hebt u uw mltable bestand opgeslagen op schijf, waardoor het moeilijk is om te delen met teamleden. Wanneer u een gegevensasset maakt in Azure Machine Learning, wordt deze mltable geüpload naar cloudopslag en 'bladwijzers' gemaakt. Uw teamleden hebben vervolgens toegang tot de mltable met een beschrijvende naam. De gegevensasset is ook geversied.

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)

Nu de mltable cloud is opgeslagen, hebben u en uw teamleden er toegang toe met een beschrijvende naam in een interactieve sessie (bijvoorbeeld een notitieblok):

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()

U kunt de gegevens ook in uw taak laden.

Volgende stappen