我在使用 ff/ffdf 和 ffdfdply 函数时遇到“错误:无法分配大小为 ...MB 的向量”问题。
我正在尝试使用 ff 和 ffdf 包来处理已键入组的大量数据。数据(ffdf 表格格式)如下所示:
x =
id_1 id_2 month year Amount key
1 13 1 2013 -200 11
1 13 2 2013 300 54
2 19 1 2013 300 82
3 33 2 2013 300 70
.... (10+ Million rows)
唯一键是使用以下内容创建的:
x$key = as.ff(as.integer(ikey(x[c("id_1","id_2","month","year")])))
通过使用 key 变量进行分组来总结,我有这个命令:
summary = ffdfdply(x=x, split=x$key, FUN=function(df) {
df = data.table(df)
df = df[,list(id_1 = id_1[1], withdraw = sum(Amount*(Amount>0),na.rm=T), by = "key"]
df
},trace=T)
使用 data.table 出色的分组功能(取自本次讨论的想法)。在实际代码中,有更多函数可应用于 Amount 变量,但即使这样,我也无法处理完整的 ffdf 表(表的较小子集可以正常工作)。
似乎 ffdfdplyis 使用了大量的内存,给出:
Error: cannot allocate vector of size 64MB
BATCHBYTES 似乎也没有帮助。任何有 ffdffply 经验的人都可以推荐任何其他方法来解决这个问题,而无需将 ffdf 表预先拆分成块?