R - 数据调整和可伸缩代码

时间:2015-11-19 10:54:13

标签: r azure sparkr h2o data-munging

HY, 在最后几天,我遇到了一个小问题。

我有一个交易数据集,有100万行和两列(客户端ID和产品ID),我希望将其转换为二进制矩阵。 我使用了reshape和spread功能,但在这两种情况下我都使用了64mb ram而Rstudio / R下降了。 因为我只使用1个CPU,所以这个过程需要花费很多时间 我的问题是,在小数据和大数据之间的这种转变中,新的陡峭前进是什么?谁可以使用更多的cpu?

我搜索并找到了几个解决方案,但我需要专业知识意见

1 - 使用Spark R?

2 - H20.ai解决方案? http://h2o.ai/product/enterprise-support/

3 - 革命分析? http://www.revolutionanalytics.com/big-data

4 - 去云端?像微软天蓝色?

如果我需要,我可以使用具有大量内核的虚拟机..但我需要知道进行此交易的顺畅方式

我的具体问题

我有这个data.frame(但有100万行)

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)

这适用于一些小数据集..但是有100万行这需要很长时间(12小时)并且由于我的最大内存为64MB而下降。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

你不知道你想对结果做什么,但创建这样一个矩阵的最有效方法是创建一个稀疏矩阵。

这是一个类似矩阵的密集对象,为所有这些NA值浪费了大量的RAM。

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  .   .   .

使用逻辑稀疏矩阵需要更少的RAM:

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 . |  .   .   .

答案 1 :(得分:0)

我不确定这是一个编码问题......但是......

SQL Server 2016的新社区预览已在服务器上内置了R,您可以下载预览以尝试此处:https://www.microsoft.com/en-us/evalcenter/evaluate-sql-server-2016

这样做会将您的R代码带入您的数据并在SQL引擎之上运行,从而实现您使用SQL内置的相同类型的可伸缩性。

或者您可以在Azure中站起来,通过转到新门户,选择“新建”“虚拟机”并搜索“SQL” enter image description here