2024-10-08 19:27:04 发布
网友
dask是否可以一次将一行加载到内存中?我有一个巨大的200GB数据集,我希望dask在给定索引的情况下一次检索一行。然后我想从行中获取numpy数组。当我试着打电话时:
Dask尝试将整个df加载到内存中,而不仅仅是一小行。如果我不调用compute而只调用values,那么df_row仍然是磁盘阵列对象。这似乎必须有一个明显的解决方案,因为它是一个如此常见和简单的用例。我做错什么了?在
如果Dask可以在不加载数据的情况下知道每个分区中索引的起始值和结束值(称为“divisions”),并且这些分区形成单调的进程,则Dask不会加载所有行。在
例如,parquet数据类型通常在元数据中存储列max/min值,因此如果数据被合理地排序,那么.loc[]实际上只加载包含该数据的一个分区。在
.loc[]
但是,对于CSV这样的数据格式,如果不解析和考虑所有数据,就不可能知道给定分区是否包含与请求对应的索引值。在
您可能有兴趣对数据重新分区或显式设置索引,或者,如果您独立地知道它们,请在尝试.loc操作之前提供除法的值。在
.loc
如果Dask可以在不加载数据的情况下知道每个分区中索引的起始值和结束值(称为“divisions”),并且这些分区形成单调的进程,则Dask不会加载所有行。在
例如,parquet数据类型通常在元数据中存储列max/min值,因此如果数据被合理地排序,那么
.loc[]
实际上只加载包含该数据的一个分区。在但是,对于CSV这样的数据格式,如果不解析和考虑所有数据,就不可能知道给定分区是否包含与请求对应的索引值。在
您可能有兴趣对数据重新分区或显式设置索引,或者,如果您独立地知道它们,请在尝试
.loc
操作之前提供除法的值。在相关问题 更多 >
编程相关推荐