#pandas #psycopg2
#pandas #psycopg2
Вопрос:
Я использую pandas pd.read_sql_query, чтобы каждый день считывать приличный объем данных в память для их обработки (добавлять столбцы, вычисления и т.д. Примерно к 1 ГБ данных). Это несколько раз приводило к зависанию моего компьютера, поэтому сегодня я попытался использовать psql для создания файла .csv. Затем я заархивировал этот файл (.xz) и прочитал его с помощью pandas.
В целом, это было намного плавнее, и это заставило меня задуматься об автоматизации процесса. Возможно ли заменить сохранение файла .csv.xz и вместо этого скопировать данные непосредственно в память, сохраняя при этом их сжатие (в идеале)?
buf = StringIO()
from_curs = from_conn.cursor()
from_curs.copy_expert("COPY table where row_date = '2016-10-17' TO STDOUT WITH CSV HEADER", buf)
(is it possible to compress this?)
buf.seek(0)
(прочитайте buf с помощью pandas, чтобы обработать его)
Комментарии:
1. Поскольку вы удаляете зависшую часть путем сброса на диск, почему бы вам просто не остановиться на этом? Запись файла стабильна, и чтение его обратно тоже, больше ничего не требуется. Скажите, почему вы вообще сжимаете его на 1 ГБ?
2. Вероятно, вы правы, и именно этим я сейчас и занимаюсь. У меня такой большой прирост производительности при сжатии реальных файлов, что я задумался, возможно ли это с помощью stringio, или стоит просто сэкономить память или ускорить процесс.
3. Я заинтригован тем фактом, что у вас такой большой выигрыш со сжатыми файлами по сравнению с несжатыми файлами для загрузки одного и того же фрейма данных. Не могли бы вы уточнить показатели производительности, с которыми вы сталкиваетесь? Вы также используете вращающиеся диски или SSD?