我一直在寻找解决方案,但似乎找不到任何东西。
基本上,我有一段代码希望扩展到大数据,代码的示例摘录如下:
num_train <- 100
num_test <- 100
train <- data.table(k = rep(1,num_train), ID_train = 1:num_train, b_train = rnorm(num_train), c_train = rnorm(num_train), cat = sample(c("A", "B", "C", "D"), num_train, replace = TRUE))
test <- data.table(k = rep(1,num_test), ID_test = 1:num_test, b_test = rnorm(num_test), c_test = rnorm(num_test))
df <- merge(test,train, by="k")
当我在更大的数据上使用它时,它完全按照我想要的方式运行并且速度非常快。(可能与 num_train * num_test = 2,000,000,000 一样大......)
然而问题是生成的数据表增长了 num_train*num_test 行,所以很快就太大了,R 无法处理。
num_train <- 1000
num_test <- 10000
train <- data.table(k = rep(1,num_train), ID_train = 1:num_train, b_train = rnorm(num_train), c_train = rnorm(num_train), cat = sample(c("A", "B", "C", "D"), num_train, replace = TRUE))
test <- data.table(k = rep(1,num_test), ID_test = 1:num_test, b_test = rnorm(num_test), c_test = rnorm(num_test))
df <- merge(test,train, by="k")
>Error: cannot allocate vector of size 76.3 Mb
我知道 R 和包的所有内存限制,例如 filehash、ff 和 bigmemory(不太熟悉,已经使用了一些)。这些似乎允许您将大文件设置为数据库并有效地从中读取数据。
但基本上我想知道的是,有没有办法管理从已经在内存中的表创建一个大表,比如在创建时将它的一部分写入硬盘?这些软件包中的任何一个都可以为此工作吗?还有其他解决方案吗?
还是这份工作不适合 R?
干杯!