Skapa en datatillgång
Som datavetare vill du fokusera på att träna maskininlärningsmodeller. Även om du behöver åtkomst till data som indata för en maskininlärningsmodell, vill du inte bekymra dig om hur du får åtkomst. För att förenkla åtkomsten till de data som du vill arbeta med kan du använda datatillgångar.
Förstå datatillgångar
I Azure Machine Learning är datatillgångar referenser till var data lagras, hur du får åtkomst och andra relevanta metadata. Du kan skapa datatillgångar för att få åtkomst till data i datalager, Azure Storage-tjänster, offentliga URL:er eller data som lagras på din lokala enhet.
Fördelarna med att använda datatillgångar är:
- Du kan dela och återanvända data med andra medlemmar i teamet så att de inte behöver komma ihåg filplatser.
- Du kan sömlöst komma åt data under modellträningen (oavsett vilken beräkningstyp som stöds) utan att behöva bekymra dig om anslutningssträng eller datasökvägar.
- Du kan versionshanterade metadata för datatillgången.
Det finns tre huvudsakliga typer av datatillgångar som du kan använda:
- URI-fil: Pekar på en specifik fil.
- URI-mapp: Pekar på en mapp.
- MLTable: Pekar på en mapp eller fil och innehåller ett schema som ska läsas som tabelldata.
Kommentar
URI står för Enhetlig resursidentifierare och står för en lagringsplats på din lokala dator, Azure Blob eller Data Lake Storage, offentligt tillgänglig https-plats eller till och med ett anslutet datalager.
När du ska använda datatillgångar
Datatillgångar är mest användbara när du kör maskininlärningsuppgifter som Azure Machine Learning-jobb. Som jobb kan du köra ett Python-skript som tar indata och genererar utdata. En datatillgång kan parsas som både indata eller utdata för ett Azure Machine Learning-jobb.
Låt oss ta en titt på var och en av typerna av datatillgångar, hur du skapar dem och hur du använder datatillgången i ett jobb.
Skapa en URI-fildatatillgång
En URI-fildatatillgång pekar på en specifik fil. Azure Machine Learning lagrar endast sökvägen till filen, vilket innebär att du kan peka på vilken typ av fil som helst. När du använder datatillgången anger du hur du vill läsa data, vilket beror på vilken typ av data du ansluter till.
De sökvägar som stöds som du kan använda när du skapar en URI-fildatatillgång är:
- Lokal:
./<path> - Azure Blob Storage:
wasbs://<account_name>.blob.core.windows.net/<container_name>/<folder>/<file> - Azure Data Lake Storage (Gen 2):
abfss://<file_system>@<account_name>.dfs.core.windows.net/<folder>/<file> - Datalager:
azureml://datastores/<datastore_name>/paths/<folder>/<file>
Viktigt!
När du skapar en datatillgång och pekar på en fil eller mapp som lagras på den lokala enheten laddas en kopia av filen eller mappen upp till standarddataarkivet workspaceblobstore. Du hittar filen eller mappen i LocalUpload mappen. Genom att ladda upp en kopia kan du fortfarande komma åt data från Azure Machine Learning-arbetsytan, även om den lokala enhet där data lagras inte är tillgänglig.
Om du vill skapa en URI-fildatatillgång kan du använda följande kod:
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
my_path = '<supported-path>'
my_data = Data(
path=my_path,
type=AssetTypes.URI_FILE,
description="<description>",
name="<name>",
version="<version>"
)
ml_client.data.create_or_update(my_data)
När du parsar URI-fildatatillgången som indata i ett Azure Machine Learning-jobb måste du först läsa data innan du kan arbeta med dem.
Anta att du skapar ett Python-skript som du vill köra som ett jobb och anger värdet för indataparametern input_data som URI-fildatatillgången (som pekar på en CSV-fil). Du kan läsa data genom att inkludera följande kod i Python-skriptet:
import argparse
import pandas as pd
parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()
df = pd.read_csv(args.input_data)
print(df.head(10))
Om din URI-fildatatillgång pekar på en annan typ av fil måste du använda rätt Python-kod för att läsa data. Om du till exempel arbetar med JSON-filer i stället för CSV-filer pd.read_json() använder du i stället.
Skapa en URI-mappdatatillgång
En URI-mappdatatillgång pekar på en specifik mapp. Den fungerar ungefär som en URI-fildatatillgång och stöder samma sökvägar.
Om du vill skapa en URI-mappdatatillgång med Python SDK kan du använda följande kod:
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
my_path = '<supported-path>'
my_data = Data(
path=my_path,
type=AssetTypes.URI_FOLDER,
description="<description>",
name="<name>",
version='<version>'
)
ml_client.data.create_or_update(my_data)
När du parsar URI-mappdatatillgången som indata i ett Azure Machine Learning-jobb måste du först läsa data innan du kan arbeta med dem.
Anta att du skapar ett Python-skript som du vill köra som ett jobb och att du anger värdet för indataparametern input_data som URI-mappdatatillgången (som pekar på flera CSV-filer). Du kan läsa alla CSV-filer i mappen och sammanfoga dem, vilket du kan göra genom att inkludera följande kod i Python-skriptet:
import argparse
import glob
import pandas as pd
parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()
data_path = args.input_data
all_files = glob.glob(data_path + "/*.csv")
df = pd.concat((pd.read_csv(f) for f in all_files), sort=False)
Beroende på vilken typ av data du arbetar med kan koden du använder för att läsa filerna ändras.
Skapa en MLTable-datatillgång
Med en MLTable-datatillgång kan du peka på tabelldata. När du skapar en MLTable-datatillgång anger du schemadefinitionen för att läsa data. Eftersom schemat redan har definierats och lagrats med datatillgången behöver du inte ange hur data ska läsas när du använder dem.
Därför vill du använda en MLTable-datatillgång när schemat för dina data är komplext eller ändras ofta. I stället för att ändra hur du läser data i varje skript som använder data behöver du bara ändra dem i själva datatillgången.
När du definierar schemat när du skapar en MLTable-datatillgång kan du också välja att endast ange en delmängd av data.
För vissa funktioner i Azure Machine Learning, till exempel Automatiserad maskininlärning, måste du använda en MLTable-datatillgång eftersom Azure Machine Learning behöver veta hur man läser data.
Om du vill definiera schemat kan du inkludera en MLTable-fil i samma mapp som de data som du vill läsa. MLTable-filen innehåller sökvägen som pekar på de data som du vill läsa och hur du läser data:
type: mltable
paths:
- pattern: ./*.txt
transformations:
- read_delimited:
delimiter: ','
encoding: ascii
header: all_files_same_headers
Dricks
Läs mer om hur du skapar MLTable-filen och vilka transformeringar du kan inkludera.
Om du vill skapa en MLTable-datatillgång med Python SDK kan du använda följande kod:
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
my_path = '<path-including-mltable-file>'
my_data = Data(
path=my_path,
type=AssetTypes.MLTABLE,
description="<description>",
name="<name>",
version='<version>'
)
ml_client.data.create_or_update(my_data)
När du parsar en MLTable-datatillgång som indata till ett Python-skript som du vill köra som ett Azure Machine Learning-jobb kan du inkludera följande kod för att läsa data:
import argparse
import mltable
import pandas
parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()
tbl = mltable.load(args.input_data)
df = tbl.to_pandas_dataframe()
print(df.head(10))
En vanlig metod är att konvertera tabelldata till en Pandas-dataram. Men du kan också konvertera data till en Spark-dataram om det passar din arbetsbelastning bättre.