从Dask Dataframe中获取一行,而不将整个Dataframe加载到内存中

2024-10-08 19:27:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

^{1}$

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


Tags: 数据对象内存numpydf情况数组解决方案
1条回答
网友
1楼 · 发布于 2024-10-08 19:27:04

如果Dask可以在不加载数据的情况下知道每个分区中索引的起始值和结束值(称为“divisions”),并且这些分区形成单调的进程,则Dask不会加载所有行。在

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

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

您可能有兴趣对数据重新分区或显式设置索引,或者,如果您独立地知道它们,请在尝试.loc操作之前提供除法的值。在

相关问题 更多 >

    热门问题