Jakub Okoński created ARROW-5086:
------------------------------------
Summary: Space leak in ParquetFile.read_row_group()
Key: ARROW-5086
URL: https://issues.apache.org/jira/browse/ARROW-5086
Project: Apache Arrow
Issue Type: Bug
Components: Python
Affects Versions: 0.12.1
Reporter: Jakub Okoński
Attachments: all.png
I have a code pattern like this:
reader = pq.ParquetFile(path)
for ix in range(0, reader.num_row_groups):
table = reader.read_row_group(ix, columns=self._columns)
# operate on table
But it leaks memory over time, only releasing it when the reader object is
collected. Here's a workaround
num_row_groups = pq.ParquetFile(path).num_row_groups
for ix in range(0, num_row_groups):
table = pq.ParquetFile(path).read_row_group(ix, columns=self._columns)
# operate on table
This puts an upper bound on memory usage and is what I'd expect from the code.
I also put gc.collect() to the end of every loop.
I charted out memory usage for a small benchmark that just copies a file, one
row group at a time, converting to pandas and back to arrow on the writer path.
Line in black is the first one, using a single reader object. Blue is
instantiating a fresh reader in every iteration.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)