У меня есть эта функция. Чтобы подсчитать использование оперативной памяти на моем сервере:
Код: Выделить всё
def log_memory_usage():
memory_info = psutil.virtual_memory()
memory_used_gb = memory_info.used / (1024**3) # Convert to GB
logger.info(f"System-wide memory used: {memory_used_gb:.2f} GB")
У меня есть столбец фрейма данных, представляющий собой строковый формат JSON.
При просмотре потребления оперативной памяти с помощью функции выше и df.info(memory_usage='deep' я получаю странные результаты:
Код: Выделить всё
2024-10-30 14:34:44,016 [semantic population]: INFO : System-wide memory used: 2.41 GB
Index: 363925 entries, 0 to 367312
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 table_id 363925 non-null object
1 table 363925 non-null object
2 table_from_name_field 363925 non-null object
3 column 363925 non-null object
4 source_data 363925 non-null object
5 schema 363925 non-null object
6 openai_res 363925 non-null object
dtypes: object(7)
memory usage: 3.3 GB
Я понятия не имею, как вся оперативная память составляет 2,41 ГБ, а кадр данных 3.3.
Затем я запускаю функцию, чтобы изменить столбец JSON на его ключи:
Код: Выделить всё
def get_row(row):
try:
js = json.loads(row['openai_res'])
row['description'] = js['description']
row['business_term'] = js['business_term']
row['explanation'] = js['explanation']
row['columns'] = js['columns']
row['openai_res'] = pd.NA
del js
return row
except ValueError as e:
return
df = df.progress_apply(get_row,axis=1)
Результаты еще более странные:
Код: Выделить всё
Index: 363925 entries, 0 to 367312
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 table_id 355757 non-null object
1 table 355757 non-null object
2 table_from_name_field 355757 non-null object
3 column 355757 non-null object
4 source_data 355757 non-null object
5 schema 355757 non-null object
6 openai_res 0 non-null object
7 description 355757 non-null object
8 business_term 355757 non-null object
9 explanation 355757 non-null object
10 columns 355757 non-null object
dtypes: object(11)
memory usage: 980.0 MB
2024-10-30 14:42:59,203 [business_terms.py]: INFO : None
2024-10-30 14:42:59,207 [semantic population]: INFO : System-wide memory used: 24.07 GB
Итак, мои вопросы:
- Как правильно измерить, сколько оперативной памяти занимает мой фрейм данных?
- Если я сделаю это правильно, как мне освободить всю оперативную память? это берется при анализе json?
- Я думаю, это связано с ОС. Это происходит на моем сервере AmazonLinux EC2, но на моем MacBook Pro потребление оперативной памяти примерно такое же.
Подробнее здесь: https://stackoverflow.com/questions/791 ... ame-column