MemoryError во время чтения CSV - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь прочитать некоторую информацию в 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

1 Ответ

0 голосов
/ 16 июля 2019

В основном проблема была с памятью.Я немного поиграл с chunk-size +, добавил несколько фильтраций, которые позже были в коде на чанке.Это позволило мне разместить данные в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...