Azure ML 机器学习: pandas格式文件,多文件上传至Azure Datastore,并且注册至Azure Datasets

Azure ML: pandas格式文件,多文件上传至Azure Datastore,并且注册至Azure Datasets

解释(1)如何将pandas格式文件上传至Azure Datastore,并且注册至Azure Datasets中;(2)如何将一个文件夹下所有文件,或者特定的几个文件上传至Azure Datastore,并且注册至Azure Datasets中。



1 Azure Datasets 和 Azure Datastore 概念

回忆一下,当我们新建一个Azure Machine Learning Workspace的时候,需要链接或者新建一个Azure Storage账户(用以保存数据),一个Azure Key Vault账户(用以保存密码),一个Azure Application insights账户(一些monitoring功能),以及一个Azure Container Registry账户(保存Container及其相关)。

在这里插入图片描述

1.1 Azure Datastore

在Azure Machine Learning中,Azure Datastore是对Azure Storage的引用。每个Azure ML Workspace都有一个默认的数据存储区域,就是我们刚创建Workspace的时候链接的Azure Storage账户。

下面是我们通过workspace.get_default_datastore()返回的datastore实例:

{
  "name": "XXX",
  "container_name": "XXX",
  "account_name": "XXX",
  "protocol": "XXX",
  "endpoint": "XXX"
}

注意,这里container_name指的是Azure Storage Container Name。

所以说,我们可以通俗意义上把Azure Datastore和Azure Storage划约等号。

1.2 Azure Datasets

上面提到的Azure Datastore是我们这个Azure ML Workspace存储数据的引用,那么Azure Datasets 就是具体的数据集的引用了。需要注意的是,Azure Datasets并不是指一个数据集,实际上它有两种类型:FileDatasetTabularDataset,具体取决于用户在训练中使用它们的方式。 这两种类型均可用于涉及估算器、AutoML、hyperDrive 和管道的 Azure 机器学习训练工作流。

下面是我们通过Dataset.get_by_name返回的dataset实例:

TabularDataset
{
  "source": [
    "('workspaceblobstore', 'XXX')"
  ],
  "definition": [
    "GetDatastoreFiles",
    "ReadParquetFile",
    "DropColumns"
  ],
  "registration": {
    "id": "XXX",
    "name": "XXX",
    "version": 2,
    "workspace": "XXX"
  }
}

当我们进入Azure Machine Learning Studio,打开Datasets这栏,我们就能看到注册成功的Azure Datasets,比如下图:

在这里插入图片描述

3 将pandas格式文件上传与注册

在数据处理的项目中,我们经常会遇见,一个csv文件输入,并希望注册到Azure数据集以进行进一步处理。如下代码解释了如何通过Dataset.Tabular.register_pandas_dataframe一次性对pandas格式文件进行上传与注册:

import pandas as pd
from azureml.core import Dataset
from azureml.core.datastore import Datastore
from azureml.core import Workspace
# Pandas dataframe from a local CSV file
pandas_df = pd.read_csv("./data/titanic.csv")
# Getting workspace default Azure Datastore
workspace = Workspace.from_config()
datastore = workspace.get_default_datastore()
# Uploading Pandas dataframe and registering it as a dataset
# dataset=Dataset.Tabular.register_pandas_dataframe(
#   <pandas dataframe>, <datastore>, "<name of registered dataset>", show_progress=True)
dataset = Dataset.Tabular.register_pandas_dataframe(
    pandas_df, datastore, "ds_from_pandas_df", show_progress=True)

当我们运行上述代码后,terminal会出现如下日志(由于我们在register_pandas_dataframe函数设置了show_progress):

Validating arguments.
Arguments validated.
Successfully obtained datastore reference and path.
Uploading file to managed-dataset/add1d6c4-efa5-4e27-ac4a-2a338b99662a/
Successfully uploaded file to datastore.
Creating and registering a new dataset.
Successfully created and registered a new dataset.

当我们打开Azure Storage账号,并且找到managed-dataset/add1d6c4-efa5-4e27-ac4a-2a338b99662a/这个路径下的文件,

在这里插入图片描述

我们发现part-00000.parquet文件。根据微软关于.parquet文件描述,在使用Dataset.Tabular.register_pandas_dataframe的时候,系统对数据进行了压缩:

“如果数据已压缩,则可进一步让其扩展;以压缩 parquet 格式存储的 20 GB 相对稀疏的数据可以在内存中扩展到大约 800 GB。 由于 Parquet 文件以纵栏格式存储数据,因此,如果只需要一半的列,则只需在内存中加载大约 400 GB。”

我们也可以通过如下的方式从Azure Datasets中获得pandas数据,并重新转化成dataframe形式:

from azureml.core import Workspace, Dataset
workspace = Workspace.from_config()
dataset = Dataset.get_by_name(workspace, name='ds_from_pandas_df')
dataset.to_pandas_dataframe()

4 将一个文件夹下所有文件,或者特定的几个文件上传并注册

我们也可以将一个文件夹下的所有文件,或者特定的几个文件上传到Azure Datastore,并注册到Azure Datasets

from azureml.core import Dataset
from azureml.data.datapath import DataPath
from azureml.core import Workspace

# Getting workspace default datastore
workspace = Workspace.from_config()
datastore = workspace.get_default_datastore()
# Uploading local directory and creating a FileDataset to Azure Storage
dataset = Dataset.File.upload_directory(
    src_dir="./data/", target=DataPath(datastore, "/data/"), show_progress=True
)
# You can register the datastore created by uploading the directory. Then you will see a dataset called 'ds_from_directory' in Azure ML Studio Datasets
dataset.register(
    workspace=workspace,
    name="ds_from_directory",
    description="This dataset was creating by uploading a directory",
)

我们在运行了上面的代码后,系统将本地路径下data文件夹下的所有文件,上传到了Azure Storage账号/data/文件夹内。并且,系统将这几个文件注册进了名为ds_from_directoryAzure Datasets

在这里插入图片描述

我们也可以通过如下的方式从Azure Datasets中获得上述的这几个文件,并且重新下载到本地:

from azureml.core import Workspace, Dataset
workspace = Workspace.from_config()
dataset = Dataset.get_by_name(workspace, name='ds_from_directory')
dataset.download(target_path='.', overwrite=False)

我们也可以在某个文件夹下选择特定的一类文件,然后进行上传和注册:

# Upload source files based on their path name using Pattern
# In this example, we are going to use only .csv files
dataset_pattern = Dataset.File.upload_directory(
    src_dir="./data/",
    target=DataPath(datastore, "/data_pattern/"),
    pattern="*.csv",
    show_progress=True,
)

这里,我们将data文件夹下的所有.csv文件上传到Azure Storage账号/data_pattern/文件夹内。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

破浪会有时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值