А как вы читаете DataFrem объемом более 10 GB?

23.07.2018, 10:22:52
homeless
Добрый день!
у меня 4ГБ оперативки, но на AWS можно арендовать хоть 200. Для препроцессинга и пары часов хватит, то есть максимум доллар потратишь.

Это всё верно, и мучиться с 2 гигами оперативки это пустая трата времени. Если идти за победой то надо арендовать машину и не париться.
Но у меня другая ситуация. На призовое место я не надеюсь, я здесь ради практики.
Сначала пробовал так, потом переделал по другому, прежде чем разобрался вынес всем мозг вопросами)))
Придумывать самому себе задачи для практики тяжеловато. Плюс тут общение с сообществом, даже появляется чувство, что ты можешь себя к данному сообществу причислить. А это +100500 к мотивации.
Отредактировано 23.07.2018, 10:23:45
23.07.2018, 14:06:50
GTPSE
В конечном итоге я пробегаю по DataFrame всего за 7 минут. Собираю все признаки (их более 3 млн.).

Семен, я правильно понимаю, что за 7 минут у вас получилось перегнать все данные из 10Гб tsv файла в DataFrame размером ~ (19,5 млн * 3 млн)?
23.07.2018, 14:32:42
В обычный DataFrame не влезет, сейчас нашел что можно делать sparse DataFrame, но чаще используют просто разряжненную матрицу https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html
Последний пример формирования то что нам надо, нужно максимум гигов памяти 10 в пике создания, или даже меньше. Первое формирование у меня шло минут 20 кажется, загрузка заранее сохраненного csr файла секунд 15-20
Словарики тоже в память не войдут.
23.07.2018, 16:28:35
rekcahd
чаще используют просто разряжненную матрицу …
Дмитрий, скажите, а классификаторы из sklearn или xgboost умеют с такими разреженными матрицами работать?
23.07.2018, 18:01:49
Да xgboost и lightgbm точно хорошо работают. Sklearn не проверял но большая часть должна работать
25.07.2018, 04:04:01
Алексей Гришин
GTPSE
В конечном итоге я пробегаю по DataFrame всего за 7 минут. Собираю все признаки (их более 3 млн.).

Семен, я правильно понимаю, что за 7 минут у вас получилось перегнать все данные из 10Гб tsv файла в DataFrame размером ~ (19,5 млн * 3 млн)?

Нет, за семь минут я пробегаю по crx_data_train_x.csv построчно, парсю строки 3 - 5 и складываю все ключи в list для последующего преобразования DataFrame в разряженную матрицу (эта операция потребляет всего 200 мегабайт памяти и мне кажется, что её еще можно оптимизировать, например в место list использовать Set или Tuple). А вот на преобразовании DataFrame в разряженную матрицу всё и замирает.
Способ который я выбрал явно не оптимальный. Работать с Dict такой же длины я могу без проблем, а преобразовать словарь в DataFrame не получается, комп сразу виснет.
Отредактировано 25.07.2018, 09:04:38
15.08.2018, 12:54:35
А кто вам сказал, что все 10 Гб читаются в оперативную память?
Вы про виртуальную память и swap слышали?

Вообще думаю, что можно использовать идею как в external merge sort
15.08.2018, 12:55:51
GTPSE
Алексей Гришин
GTPSE
В конечном итоге я пробегаю по DataFrame всего за 7 минут. Собираю все признаки (их более 3 млн.).

Семен, я правильно понимаю, что за 7 минут у вас получилось перегнать все данные из 10Гб tsv файла в DataFrame размером ~ (19,5 млн * 3 млн)?

Нет, за семь минут я пробегаю по crx_data_train_x.csv построчно, парсю строки 3 - 5 и складываю все ключи в list для последующего преобразования DataFrame в разряженную матрицу (эта операция потребляет всего 200 мегабайт памяти и мне кажется, что её еще можно оптимизировать, например в место list использовать Set или Tuple). А вот на преобразовании DataFrame в разряженную матрицу всё и замирает.
Способ который я выбрал явно не оптимальный. Работать с Dict такой же длины я могу без проблем, а преобразовать словарь в DataFrame не получается, комп сразу виснет.
Извиняюсь еще изначальный файл в ASCII? Можно перевести в бинарный формат, что уменьшит время считывания в дальнейшем.
Отредактировано 15.08.2018, 12:56:55


Зарегистрируйтесь или войдите, чтобы оставить сообщение.