Размер файла CSV экспоненциально увеличивался при каждом сбое и последующих успешных запусках - PullRequest
0 голосов
/ 02 ноября 2019

Мой скрипт на python сбрасывает данные в CSV после ежедневной обработки. По какой-то причине размер CSV внезапно увеличился в геометрической прогрессии (фактический размер от 0,5 до 1 ГБ). Я проверил сценарий, и не было выполнено ни одного цикла для добавления повторяющихся записей в CSV.

Однако на стороне сервера были исключения памяти, которые приводили к сбою сценария при вводе записей в БД. После очистки исключений памяти на сервере, последующие запуски были успешными. Но размер CSV был увеличен в геометрической прогрессии.

Я предполагаю, что память файла CSV не освобождалась при сбое сценария из-за исключений памяти на стороне сервера. После устранения проблем с памятью на сервере, последующих запусках, память CSV была выделена с учетом размера памяти, которая была удержана / не освобождена во время неудачных запусков.

Другая проблема могла быть read_csv, которая не была инкапсулирована в with statment - это можно исправить, но мне больше интересно узнать, что приводит к увеличению размера файла CSV (5 ГБ) по сравнению с обычным размером.

Примечание: скрипт выполняется под ОС Ubuntu.

Создание CSV происходит задолго до вставки данных в БД, мне интересно, что привело к увеличению размера CSV, даже если вставка БД не удалась из-за исключения из памяти.

Даже вручную запускали один и тот же сценарий и извлекали одинаковое количество записей из БД, а размер CSV был очень мал.

##Following are the code snippets... 

##Append extracted data to existing CSV.

with open(input_file,'a',encoding='utf-8',errors='ignore') as file:
    df_trans.to_csv(file,header=False,index=False)


##Read data in chunks,concatinate and create dataframe for intermidiate processing
data_in_chunks = pd.read_csv(input_file,error_bad_lines=False,iterator=True,chunksize=50000,
                                    warn_bad_lines=True,encoding='latin1')
df = pd.concat(data_in_chunks, ignore_index=True)

##Generate new CSV with updated dataframe for next day processing.
pd.DataFrame(df.to_csv(input_file,index=False,columns=(df.columns)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...