我想从zip存档中将多个csv加载到dask中。我尝试了以下几种方法,但是无论尝试如何,都会遇到内存错误,即使看起来似乎已经绕过了我认为的问题。
磁盘上的内存限制阻止我解压缩,所以我不能使用dd.read_csv()。因此,我使用delay(pd.read_csv()),然后使用dd.from_delayed()。因为我分别读取的每个数据帧都适合内存,但是在我读取每个数据帧后,该集合不会重新分区,因为我可能会错误地认为dask一次将一个分区保存在内存中。我看到使用get_partition时每个分区使用相等的内存。当我使用memory_usage时,即使在重新分区后,内存利用率也表明整个数据帧都在内存中,而不是单个分区。因此,每次我使用以下代码加载csv时,使用top都会看到内存逐渐填满,直到出现内存错误。我还尝试限制set_options使用的内存量,希望这将迫使dask将内存中的数据推入磁盘,但这是行不通的。我认为磁盘空间也不可能全部填满。我认为是RAM。
import pandas as pd
import zipfile
import dask.dataframe as dd
from dask.delayed import delayed
import dask
dask.set_options(available_memory=3e9)
with zipfile.ZipFile(path_to_zip_archive) as z:
with z.open(compressed_csv_1) as f:
df_1 = delayed(pd.read_csv(f))
df_1 = dd.from_delayed([df_1], meta=my_dtypes)
df_1 = df_1.repartition(npartitions=100)
with z.open(compressed_csv_2) as f:
df_2 = delayed(pd.read_csv(f))
df_2 = dd.from_delayed([df_2], meta=my_dtypes)
df_2 = df_2.repartition(npartitions=100)
与
df_1.memory_usage()
获取内存利用率
等
我希望能够从压缩的zip存档中读取csvs并将它们连接起来,以实现单个dask数据帧而不会出现内存错误。