Утечка памяти из пиарроу?

Для синтаксического анализа файла большего размера мне нужно последовательно выполнять циклическую запись в большое количество паркетных файлов. Однако похоже, что память, потребляемая этой задачей, увеличивается на каждой итерации, тогда как я ожидал бы, что она останется постоянной (поскольку в память ничего не должно добавляться). Это усложняет масштабирование.

Я добавил минимально воспроизводимый пример, который создает 10 000 паркета и к нему добавляется петля.

import resource
import random
import string
import pyarrow as pa
import pyarrow.parquet as pq
import pandas as pd


def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
    return ''.join(random.choice(chars) for _ in range(size))

schema = pa.schema([
                        pa.field('test', pa.string()),
                    ])

resource.setrlimit(resource.RLIMIT_NOFILE, (1000000, 1000000))
number_files = 10000
number_rows_increment = 1000
number_iterations = 100

writers = [pq.ParquetWriter('test_'+id_generator()+'.parquet', schema) for i in range(number_files)]

for i in range(number_iterations):
    for writer in writers:
        table_to_write = pa.Table.from_pandas(
                            pd.DataFrame({'test': [id_generator() for i in range(number_rows_increment)]}),
                            preserve_index=False,
                            schema = schema,
                            nthreads = 1)
        table_to_write = table_to_write.replace_schema_metadata(None)
        writer.write_table(table_to_write)
    print(i)

for writer in writers:
    writer.close()

Кто-нибудь знает, что вызывает эту утечку и как ее предотвратить?

Вы можете указать свою версию панд?

Uwe L. Korn 27.10.2018 11:58

Панды: 0.22.0 PyArrow: 0.10.0

Abel Riboulot 29.10.2018 15:41

Пожалуйста, обновитесь до pandas>=0.23. В Pandas есть утечка, которая также влияет на pyarrow.

Uwe L. Korn 29.10.2018 19:36

Пробовал и у меня такая же утечка памяти.

Abel Riboulot 29.10.2018 22:31

Мне помогло обновление до pyarrow==0.15.0.

Dima Fomin 21.10.2019 17:53
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
5
5
2 089
1

Ответы 1

Мы не уверены, что случилось, но некоторые другие пользователи сообщали о нераспознанных утечках памяти. Я добавил ваш пример в одну из проблем отслеживания JIRA https://issues.apache.org/jira/browse/ARROW-3324

Другие вопросы по теме