【发布时间】:2014-12-16 20:12:45
【问题描述】:
我有一个非常大的 CSV 文件,其中包含 42 个变量和 200 000 条记录。 我想通过 map reduce (localbackend) 来处理它,但我总是收到以下错误:
Error: cannot allocate vector of size 15.6 Gb
In addition: Warning messages:
1: closing unused connection 3 (C:\Users\LSZL~1\AppData\Local\Temp\RtmpgJ2FXm\filea302f8a7363)
2: In paste(rep(l, length(lvs)), rep(lvs, each = length(l)), sep = sep) :
Reached total allocation of 8051Mb: see help(memory.size)
3: In paste(rep(l, length(lvs)), rep(lvs, each = length(l)), sep = sep) :
Reached total allocation of 8051Mb: see help(memory.size)
4: In paste(rep(l, length(lvs)), rep(lvs, each = length(l)), sep = sep) :
Reached total allocation of 8051Mb: see help(memory.size)
5: In paste(rep(l, length(lvs)), rep(lvs, each = length(l)), sep = sep) :
Reached total allocation of 8051Mb: see help(memory.size)
我的代码:
inputformat <- make.input.format("csv", sep = ",", col.names=column_names)
a <- mapreduce(input="X:/BigData/working_dir/census-income.data",
input.format=inputformat,
map = function(k, v){
key = v
return(keyval(key, v[1,1]))
},
reduce = function(k, v){
key = k[1, 1]
val = sum(k[, 2])
return(keyval(key, val))
}
)()
是否可以不提供不必要的列(+数据)来映射减少并选择那些需要其数据的列?
【问题讨论】: