python - 有效地折叠 Parquet 中的行组

标签 python memory compression parquet

我有一个大型 Parquet 文件,其中包含许多小行组。我想生成一个带有单个(更大)行组的新 Parquet 文件,并且我正在 Python 中操作。我可以做这样的事情:

import pyarrow.parquet as pq
table = pq.read_table('many_tiny_row_groups.parquet')
pq.write_table(table, 'one_big_row_group.parquet')

# Lots of row groups...
print (pq.ParquetFile('many_tiny_row_groups.parquet').num_row_groups)
# Now, only 1 row group...
print (pq.ParquetFile('one_big_row_group.parquet').num_row_groups)

但是,这要求我立即将整个 Parquet 文件读入内存。我想避免这样做。是否有某种“流”方法可以保持较小的内存占用?

最佳答案

fastparquet 的文档指出了迭代大到无法放入内存的数据集的可能性。要阅读,您可以使用:

pf = ParquetFile('myfile.parquet')
for df in pf.iter_row_groups():
    print(df.shape)
    # process sub-data-frame df

要写入,您可以附加到文件。

关于python - 有效地折叠 Parquet 中的行组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56189982/

相关文章:

C++、内存和数组。创建我自己的 hashmap 进行练习。内存中遗留了意外数据?

database - 哪个是最好的无损数据库压缩技术

python - 根据数组元素创建变量名

python - 使用python从文件中获取聚光灯评论

ruby-on-rails - Heroku 错误 R14(超出内存配额): How do I solve this?

linux - 压缩时排除选定的子目录

c++ - 如何在 C++ 中压缩或打包文件?

python - 无法退出正在运行的 jupyter notebook 服务器

python - 如何按分组索引访问 pandas groupby 数据框?

java - 我们在设计 Android 应用程序时是否考虑了内存限制?