我在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行,所需大小的随机样本等。