将许多大型Pandas DataFrame保存到单个Parquet文件中,而无需加载到内存中

时间:2019-05-31 14:22:02

标签: pandas dataframe parquet pyarrow fastparquet

我想尝试将许多无法立即放入内存的大型Pandas DataFrame保存到一个Parquet文件中。我们希望在磁盘上有一个大的镶木地板文件,以便从那个大的文件中快速获取所需的列。

具体来说,我们有约200个小型镶木文件,每个文件有约100列(基因)和200万行(单元)。磁盘上的每个Parquet都非常小,所有200个Parquet文件的总大小约为40MB,总计约为8GB。数据非常稀疏(> 90%的值为零),并且Parquet很好地将磁盘上的数据压缩为较小的大小。

由于数据集稀疏,因此我们可以使用Pandas / Scipy稀疏数组将约25,000个基因(列)和200万行(单元格)加载到单个稀疏数据结构中。但是,我们不能将SparseDataFrame直接写到Parquet(请参见Github问题https://github.com/pandas-dev/pandas/issues/26378),而将整个矩阵转换为密集型将导致我们内存不足(例如,一个2,000列/基因和200万行的密集数组) / cells占用30GB RAM)。这使我们无法生成所需的单个大型Parquet文件。

彼得·霍夫曼(https://youtu.be/fcPzcooWrIY?t=987在16分20秒发的演讲)提到,您可以将数据流式传输到Parquet文件中(保留有关元数据的记录),而无需将所有数据保留在内存中。是否可以将列/行流化为实木复合地板文件?我找不到使用Pandas的示例。 PyArrow或FastParquet是否支持此功能?

0 个答案:

没有答案