Python 从Dask数据帧中获取一行,而不将整个数据帧加载到内存中

Python 从Dask数据帧中获取一行,而不将整个数据帧加载到内存中,python,pandas,machine-learning,bigdata,dask,Python,Pandas,Machine Learning,Bigdata,Dask,dask是否可以一次将一行加载到内存中?我有一个巨大的200GB数据集,我希望dask在给定索引的情况下一次检索一行。然后我想从行中获取numpy数组。当我试着打电话时: df_row = df.loc[index] df_row = df_row.values.compute() Dask尝试将整个df加载到内存中,而不是仅加载一小行。如果我不调用compute,只调用value,那么df_行仍然是dask.array对象。这似乎必须有一个明显的解决方案,因为这是一个如此常见和简单的用例。我

dask是否可以一次将一行加载到内存中?我有一个巨大的200GB数据集,我希望dask在给定索引的情况下一次检索一行。然后我想从行中获取numpy数组。当我试着打电话时:

df_row = df.loc[index]
df_row = df_row.values.compute()

Dask尝试将整个df加载到内存中,而不是仅加载一小行。如果我不调用compute,只调用value,那么df_行仍然是dask.array对象。这似乎必须有一个明显的解决方案,因为这是一个如此常见和简单的用例。我做错了什么?

Dask不会加载所有行,因为它可以在不加载数据的情况下知道每个分区(称为“分区”)中索引的起始值和结束值,并且分区形成单调级数

例如,拼花数据类型通常在元数据中存储列max/min值,因此如果数据被合理排序,那么
.loc[]
实际上只会加载包含数据的一个分区

但是,对于CSV等数据格式,如果不解析并考虑所有数据,就不可能知道给定分区是否包含与请求相对应的索引值


您可能有兴趣对数据重新分区或显式设置索引,或者,如果您独立了解这些数据,请在尝试
.loc
操作之前提供分区值。

啊,我认为这是有意义的。假设我有一个dask数据帧,我用HDF5格式保存它。dask是否能够在不显式设置任何内容的情况下逐行读取它?我不确定索引信息是否保存在HDF5中。你可以试试拼花地板。它仍然是一块一块的,而不是一排一排的。我会给拼花地板打一针-非常感谢你的帮助!