2013-11-18 4 views
-2

У меня есть таблица в mysql db, которая содержит 312 миллионов строк и 10 полей/столбцов. Я пытаюсь импортировать эти данные в R, используя библиотеку («RMySQL»), но это убивает мой рабочий стол (config 8 ГБ ОЗУ 64-разрядный двухъядерный процессор AMD под управлением Linux Mint 15) Есть ли эффективный способ импортировать все эти данные в Р ? Как использовать библиотеку «ff» и т. Д.?Импорт огромных данных из MySQL в R с помощью RMySQL

+0

Используйте read.dbi.ffdf из пакета ETLUtils. Он точно делает это, получает все ваши данные из SQL-запроса в ffdf (поэтому хранится на диске, а не в ОЗУ). В качестве примера с MySQL следуйте [этой ссылке] (http://bnosac.be/index.php/blog/21-readodbcffdf-a-readdbiffdf-for-fetching-large-corporate-sql-data). Если вы пробовали это, вы можете попытаться изменить свой вопрос на вопрос программирования - для чего нужен stackoverflow. – jwijffels

ответ

3

Это не поместилось бы в вашу оперативную память без использования пакета «bigdata». Быстрая демонстрация с матрицей из 1 миллиона строк и 10 колоний:

> m <- matrix(runif(1e7), 1e6, 10) 
> object.size(m)/1024/1024 
76.2941360473633 bytes 

Так что это занимает около 76 МБ ОЗУ. Ваши 312 миллиона строк будут примерно такими:

> object.size(m)/1024/1024 * 312 
23803.7704467773 bytes 

Так что около 24 ГБ ОЗУ.

Вам действительно нужно иметь все эти данные в ОЗУ? Почему не подмножество или агрегат внутри MySQL и не переходят к R, что действительно необходимо? Попробуйте dplyr.

+0

+1 для предложения dplyr. Другой подобный вариант - использовать [ETLUtils] (https://github.com/jwijffels/ETLUtils) – agstudy

+0

+1 не знал о 'dplyr'. – ialm

Смежные вопросы