2015-11-19 4 views
-2

Hy, В последние дни у меня была небольшая проблема.R - обработка данных и масштабируемый код

У меня есть набор данных транзакций с 1 миллионом строк и двумя столбцами (идентификатор клиента и идентификатор продукта), и я хочу преобразовать это в двоичную матрицу. Я использовал функцию изменения и распределения, но в обоих случаях я использовал 64 Мб RAM и Rstudio/R. Потому что я использую только 1 процессор, процесс занимает много времени Мой вопрос в том, что это новый крутой вперед в этом переходе между маленькими и большими данными? Кому я могу использовать больше процессора?

Я ищу, и я нашел пару решения, но мне нужна экспертиза мнение

1 - Использование Спарк R?

2 - Решение H20.ai? http://h2o.ai/product/enterprise-support/

3 - Революционная аналитика? http://www.revolutionanalytics.com/big-data

4 - перейти в облако? как Microsoft Light?

Если я нужен, я могу использовать виртуальную машину с большим количеством ядер .. но мне нужно знать, что это гладкий способ сделать эту сделку

Моя конкретная проблема

У меня есть эти данные. кадр (но с 1 миллиона строк)

Sell<-data.frame(UserId = c(1,1,1,2,2,3,4), Code = c(111,12,333,12,111,2,3)) 

и я сделал:

Sell[,3] <-1 

test<-spread(Sell, Code, V3) 

это работает с небольшим набором данных .. но с 1 миллионом строк это занимает много времени (12 часов) и идет вниз, потому что мой максимальный барабан равен 64 МБ. Какие-либо предложения?

+1

Ваш вопрос является слишком широким и просит мнения (оба не по теме). Покажите свою актуальную проблему (с воспроизводимым примером), и кто-то может предложить жизнеспособную альтернативу. Вероятно, вы можете оставаться в ванили R без распараллеливания. – Roland

+0

Hy Roland, спасибо за ваш комментарий. Я сейчас приведу пример. привет – Kardu

ответ

0

Я не уверен, что это вопрос кодирования ... НО ...

Новое сообщество Предварительный просмотр SQL Server 2016 имеет встроенный R на сервере, и вы можете получить скачать превью попробовать здесь: https://www.microsoft.com/en-us/evalcenter/evaluate-sql-server-2016

Выполнение этого приведет ваш код R к вашим данным и будет работать поверх SQL-сервера, позволяя использовать ту же масштабируемость, что и встроенный SQL.

Или вы можете встать ВМ в лазури, перейдя на новый портал, выбрав пункт «New», «Virtual Machine» и искать «SQL» enter image description here

1

Вы не говорите, что вы хотите делать с результатом, но наиболее эффективным способом создания такой матрицы было бы создание разреженной матрицы.

Это плотный матричный объект, который отнимает много ОЗУ для всех этих значений NA.

test 
# UserId 2 3 12 111 333 
#1  1 NA NA 1 1 1 
#2  2 NA NA 1 1 NA 
#3  3 1 NA NA NA NA 
#4  4 NA 1 NA NA NA 

Вы можете избежать этого с разреженной матрицей, которая внутренне до сих пор в основном структура длиной формата, но имеет методы для матричных операций.

library(Matrix) 
Sell[] <- lapply(Sell, factor) 
test1 <- sparseMatrix(i = as.integer(Sell$UserId), 
         j = as.integer(Sell$Code), 
         x = rep(1, nrow(Sell)), 
         dimnames = list(levels(Sell$UserId), 
             levels(Sell$Code))) 
#4 x 5 sparse Matrix of class "dgCMatrix" 
# 2 3 12 111 333 
#1 . . 1 1 1 
#2 . . 1 1 . 
#3 1 . . . . 
#4 . 1 . . . 

Вам нужно будет даже меньше оперативной памяти с логической разреженной матрицей:

test2 <- sparseMatrix(i = as.integer(Sell$UserId), 
         j = as.integer(Sell$Code), 
         x = rep(TRUE, nrow(Sell)), 
         dimnames = list(levels(Sell$UserId), 
             levels(Sell$Code))) 
#4 x 5 sparse Matrix of class "lgCMatrix" 
# 2 3 12 111 333 
#1 . . | | | 
#2 . . | | . 
#3 | . . . . 
#4 . | . . . 
+0

Я хочу матрицу с 1 и 0 (1, если клиент купит продукт и 0, если нет), а затем используйте эту матрицу (package recommenderlab.) в этом коде binary_matrix <- as (test, "binaryRatingMatrix") – Kardu

+0

@ Kardu Ваш вопрос еще недостаточно определен. Мы все еще не знаем, что именно вы пытаетесь сделать, но вам, вероятно, нужно получить более низкий уровень, чем просто использовать пакет (если он не предоставляет возможности для данных вашего размера). Плотная двоичная матрица будет огромной, если у вас много пользователей и много кодов. Даже если вы можете поместить его в свою RAM, вы не сможете работать с ним. – Roland

+0

Однако, просмотрев документацию, 'binaryRatingMatrix' кажется редким матричным объектом. На самом деле ваш вопрос заключается в том, как создать это из ваших данных. – Roland