如何解决PyArrow:增量使用ParquetWriter而不将整个数据集保留在内存中大于内存Parquet文件
我正在尝试将大型木地板文件写入磁盘(大于内存)。我天真地以为我会很聪明,可以使用ParquetWriter和write_table逐步写入文件,例如(POC):
import pyarrow as pa
import pyarrow.parquet as pq
import pickle
import time
arrow_schema = pickle.load(open('schema.pickle','rb'))
rows_dataframe = pickle.load(open('rows.pickle','rb'))
output_file = 'test.parq'
with pq.ParquetWriter(
output_file,arrow_schema,compression='snappy',allow_truncated_timestamps=True,version='2.0',# Highest available schema
data_page_version='2.0',# Highest available schema
) as writer:
for rows_dataframe in function_that_yields_data()
writer.write_table(
pa.Table.from_pydict(
rows_dataframe,arrow_schema
)
)
但是,即使我产生了块(例如我的情况下为1万行)并使用write_table
,它仍将整个数据集保留在内存中。
结果是ParquetWriter将整个数据集保留在内存中,同时将其逐步写入磁盘。
反正有强迫ParquetWriter不将整个数据集保留在内存中的原因吗?或者仅仅是出于种种原因而不可能?
解决方法
根据Arrow bug report的分析,这可能是由元数据的收集引起的,这些元数据只能在文件关闭时才被刷新。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。