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



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

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

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

我发现的关于AzureML数据集的分区的唯一概念是关于时间序列和时间戳的分区&日期。然而,在这里,我很想按设备进行分区,这样我就可以很容易地加载特定设备的所有遥测数据。

有关于文档的建议吗?(到目前为止我找不到(

已经感谢

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

同时,另一种选择是按设备ID对文件进行分区,并使用FileDataset。使用FileDataset将使您能够在计算上装载整个数据集。然后,您可以读取特定于一个/几个设备的文件。缺点是您需要直接使用panda来读取文件。

您说得对,TabularDataset提供了.time_*()过滤方法。

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

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

CAVEAT

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

表格数据集引入了自那时以来升级的过滤(从现在起是实验性的-21年2月(。

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

你也可以找到像take这样的方法,它给你前n行,所需大小的随机样本等。

最新更新