我正在使用ff
和ffbase
库来管理一个大的 csv 文件(~40Go 和 275e6 观察)。我想根据它的一列(这是一个因子列)拆分/分区这个文件。
使用普通的数据框,我会做这样的事情:
a <- data.frame(rnorm(10000,0,1),
sample(1:100,10000,replace=T),
sample(letters,10000,replace = T))
names(a) <- c('V1','V2','V3')
a_partition <- split(a,a$V3)
names(a_partition) <- paste("df",names(a_partition),sep = "_")
list2env(a_partition,globalenv())
但ff
并ffbase
没有split
功能。因此,查看ffbase
文档,我发现ffdfply
并尝试按如下方式使用它:
ffa <- as.ffdf(a)
ffa_partititon <- ffdfdply(x = ffa,split = ffa$V3)
唉,我收到日志消息:
计算拆分大小
构建拆分位置
,在拆分 1/1 上工作,在 26 个拆分元素的 RAM 中提取数据,
总计 0.00015 GB,而
使用 BATCHBYTES 指定的最大指定数据为 0.01999 GB
... 将 FUN 应用于所选数据
错误:参数“ FUN" 缺失,没有默认值
我试过FUN = as.data.frame
了(因为函数的结果必须是一个数据框)但没有运气:这样做会使 ffa_partition 成为 ffa 的副本...
如何对我的 ffdf 进行分区?