Я пытаюсь прочитать некоторую информацию в Pandas DataFrame и сталкиваюсь с проблемой из-за ценности данных.
Характеристики ПК:
ОЗУ 32 ГБ
IntelCore i7 4 ГГц
Настройка:
Данные находятся в БД MySQL, 9 столбцов (7 int, 1 date, 1 DateTime).БД находится на локальной машине, поэтому проблем с пропускной способностью интернета нет.22 мил.строки данных.
Пытался читать напрямую с сервера MySQL - это никогда не заканчивается.
engine = sqlalchemy.create_engine('mysql+pymysql://root:@localhost:3306/database')
search_df = pd.read_sql_table('search', engine)
Я проверил с помощью SO и у меня сложилось впечатление, что вместо использования коннектора лучше разбирать CSV,Я экспортировал таблицу в CSV.
Размер файла CSV - 1,5 ГБ
Мой код
dtype = {
'search_id' : int,
'job_count_total' : int,
'job_count_done' : int,
'city_id_start' : int,
'city_id_end' : int,
'date_start' : str,
'datetime_create' : str,
'agent_id' : int,
'ride_segment_found_cnt' : int
}
search_df = pd.read_csv('search.csv', sep=',', dtype=dtype)
Я пробовал оба двигателя, c
иpython
, разные размеры чанка, low_memory
как True
и False
, указаны dtypes и нет, но все еще получается MemoryError
.
Я перепробовал все, упомянутое в вопросе выше (который былпомечен как источник, мой как дубликат), но ничего не меняется.
Я заметил только две разницы:
Если я выполняю синтаксический анализ без чанков, я получаю ошибку памяти при синтаксическом анализе.
Когда я выполняю синтаксический анализ - при объединении в один DF.
Кроме того, разбиение на 5_000_000 строк дает ошибку при разборе, меньше - при объединении.
Вот сообщение об ошибке при объединении:
pandas.errors.ParserError: Error tokenizing data. C error: out of memory