1

我有一台具有 8 GB RAM 和 5 个内核的 Windows 10 机器。

我创建了一个用 gzip 压缩的镶木地板文件。压缩后的文件大小为 137 MB。当我尝试通过 Pandas、dask 和 vaex 读取 parquet 文件时,我遇到了内存问题:

熊猫

df = pd.read_parquet("C:\\files\\test.parquet")
OSError: Out of memory: realloc of size 3915749376 failed

黎明

import dask.dataframe as dd
df = dd.read_parquet("C:\\files\\test.parquet").compute()
OSError: Out of memory: realloc of size 3915749376 failed

维克斯

df = vaex.open("C:\\files\\test.parquet")
OSError: Out of memory: realloc of size 3915749376 failed

由于 Pandas /Python 旨在提高效率,并且 137 mb 文件低于标准大小,是否有任何推荐的方法来创建高效的数据帧?像 Vaex、Dask 这样的库声称非常高效。

4

3 回答 3

1

对于单机,我会推荐使用 HDF 文件格式的 Vaex。数据驻留在硬盘上,因此您可以使用更大的数据集。vaex 中有一个内置函数,可以读取较大的 csv 文件并将其转换为 hdf 文件格式。

df = vaex.from_csv('./my_data/my_big_file.csv', convert=True, chunk_size=5_000_000)

Dask 针对分布式系统进行了优化。您以块的形式读取大文件,然后将其分散在工作机器中。

于 2020-11-26T10:02:08.147 回答
1

由于 parquet 中的高效压缩和编码,137MB parquet 文件完全有可能在内存中扩展到 4GB。您可能有一些加载选项,请显示您的架构。您使用的是 fastparquet 还是 pyarrow?

由于您尝试使用的所有引擎都能够一次加载一个“行组”,我想您只有一个行组,因此拆分不起作用。如果这可以完成您的任务(所有加载器都支持这一点),您可以只加载选择的列以节省内存。

于 2020-11-26T13:53:04.937 回答
1

检查您使用的是最新版本的 pyarrow。几次更新对我有帮助。

pip install -U pyarrow

于 2021-02-15T23:38:26.973 回答