如何只加载 AzureML 表格数据集的一部分(链接到 Azure Blob 存储)

How to only load one portion of an AzureML tabular dataset (linked to Azure Blob Storage)

我在我的 AzureML 工作区中定义了一个数据集,它链接到一个 1.6Gb 的 Azure Blob 存储 csv 文件。该文件包含大约 10000 个设备的时间序列信息。因此,我还可以创建 10000 个较小的文件(因为我将 ADF 用于传输管道)。

我现在的问题是:是否可以在我的 python 笔记本或脚本中加载 AzureML 数据集的一部分而不是加载整个文件?
我现在加载完整文件的唯一代码:

dataset = Dataset.get_by_name(workspace, name='devicetelemetry')
df = dataset.to_pandas_dataframe()

关于 AzureML 数据集,我发现的唯一分区概念是围绕时间序列和时间戳与日期的分区。但是,在这里我希望按设备进行分区,这样我就可以非常轻松地加载特定设备的所有遥测数据。

有任何指向文档的指针或任何建议吗? (到目前为止我找不到)

已经谢谢了

你说得对,.time_*() 过滤方法可用于 TabularDataset

无论如何我都不知道要按照您的建议进行过滤(但我同意这将是一个有用的功能)。要获得每个设备的分区,我的建议是像这样构建您的容器:

- device1
    - 2020
        - 2020-03-31.csv
        - 2020-04-01.csv
- device2
   - 2020
        - 2020-03-31.csv
        - 2020-04-01.csv

通过这种方式,您可以定义一个完整的数据集,也可以通过将设备的文件夹传递给 DataPath 来定义每个设备的数据集

# all up dataset
ds_all = Dataset.Tabular.from_delimited_files(
    path=DataPath(datastore, '*')
)
# device 1 dataset
ds_d1 = Dataset.Tabular.from_delimited_files(
    path=DataPath(datastore, 'device1/*')
)

警告

dataprep SDK 针对大小约为 200MB 的 blob 进行了优化。因此您可以处理许多小文件,但有时它可能比预期的要慢,尤其是考虑到枚举容器中所有 blob 的开销。

表格数据集目前仅支持时间序列过滤器。我们正在努力对表格数据集启用通用过滤。

同时,另一个选择是通过deviceID对文件进行分区,使用FileDataset。使用 FileDataset 将使您能够将整个数据集装载到计算上。然后您可以阅读特定于 one/few 设备的文件。缺点是您需要直接使用 pandas 来读取文件。

TabularDataset 引入了 filtering(截至目前为试验阶段 - 2 月 21 日),此后进行了升级。

ds.filter( ds['patient_id']==my_patient_id ).to_pandas_dataframe()

您还可以找到类似 take 的方法,它可以为您提供前 n 行、所需大小的随机样本等。