Использование памяти продолжает увеличиваться при многократном чтении файлов ParquetPython

Программы на Python
Ответить
Anonymous
 Использование памяти продолжает увеличиваться при многократном чтении файлов Parquet

Сообщение Anonymous »

У меня возникла проблема, из-за которой использование памяти моим сценарием Python постоянно увеличивается во время повторной обработки файлов Parquet с помощью PyArrow — даже после явного удаления объектов и принудительной сборки мусора. Поведение аналогичное, когда я использую другие библиотеки, такие как Polars и Pandas.
У меня есть функция, которая читает файл Parquet, фильтрует строки на основе диапазона дат, а затем пытается освободить память. Я пробовал использовать явные операторы del, вызывать gc.collect() и даже использовать функции пула памяти PyArrow, такие как pa.jemalloc_set_decay_ms(0) иpool.release_unused(). Несмотря на эти усилия, использование резидентной памяти моим процессом продолжает расти с течением последующих итераций.
Вот упрощенная версия моего кода:

Код: Выделить всё

import psutil
import time
import gc
from datetime import datetime
import pyarrow.parquet as pq
import pyarrow.compute as pc
import pyarrow as pa

def print_memory_usage():
process = psutil.Process()
mem_info = process.memory_info()
print(f"Memory Usage: {mem_info.rss / 1024 / 1024:.2f} MB")

def mem_and_time(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"Execution Time: {end_time - start_time:.6f} seconds")
print_memory_usage()
return result
return wrapper

@mem_and_time
def test_func_pyarrow():
# Read Parquet file into a PyArrow Table
# Memory usage increasing also happens when I call
# pd.read_parquet or pl.read_parquet
table = pq.read_table("/Users/test.parquet")
del table
gc.collect()
pa.jemalloc_set_decay_ms(0)
pool = pa.default_memory_pool()
pool.release_unused()

return None

if __name__ == "__main__":
# Run the function repeatedly
for _ in range(1000):
test_func_pyarrow()
time.sleep(20)
При запуске этого сценария использование памяти постоянно увеличивается:

Код: Выделить всё

Execution Time: 0.985749 seconds
Memory Usage: 4542.09 MB
Execution Time: 0.873830 seconds
Memory Usage: 5926.19 MB
...
Execution Time: 0.774829 seconds
Memory Usage: 7985.73 MB
Как мне решить эту проблему? Это также происходит, когда я вызываю pd.read_parquet или pl.read_parquet. Мы будем очень признательны за любые идеи и рекомендации.
Python: 3.13.1
Pandas: 2.2.3
PyArrow: 19.0.0
ОС: MacOs Sequoia 15.3.1

Подробнее здесь: https://stackoverflow.com/questions/794 ... quet-files
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»