Мой скрипт на 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)))