我有一个由分区Parquet文件组成的大型 Impala 数据库。我直接使用hdfs将一个Parquet地板分区复制到本地磁盘。这个分区总共有15gb,由许多文件组成,每个文件有10mb。我试图用pandas和pyarrow引擎或者pyarrow直接读取这个数据,但是它在内存中的大小使用了超过60gb的ram,在使用所有内存之前它不会读取整个数据集。内存占用如此之大的原因是什么?
rpppsulh1#
磁盘和内存中Parquet文件的大小可以变化到一个量级。Parquet地板使用有效的编码和压缩技术来存储列。当您将此数据加载到ram中时,数据将解压为未压缩的形式。因此,对于大小为15g的文件数据集,预期ram使用量为150g。当您不确定这是否是您的问题时,请使用 df = pandas.read_parquet 并用 df.memory_usage(deep=True) . 这将很好地说明整个数据集的磁盘和ram之间的伸缩性。
df = pandas.read_parquet
df.memory_usage(deep=True)
1条答案
按热度按时间rpppsulh1#
磁盘和内存中Parquet文件的大小可以变化到一个量级。Parquet地板使用有效的编码和压缩技术来存储列。当您将此数据加载到ram中时,数据将解压为未压缩的形式。因此,对于大小为15g的文件数据集,预期ram使用量为150g。
当您不确定这是否是您的问题时,请使用
df = pandas.read_parquet
并用df.memory_usage(deep=True)
. 这将很好地说明整个数据集的磁盘和ram之间的伸缩性。