拆分 ffdf 对象
Splitting an ffdf object
我正在使用 ff
和 ffbase
库来管理一个大的 csv 文件(~40Go 和 275e6 观察)。我想 split/partition 这个文件根据它的列之一(这是一个因子列)。
使用普通数据框,我会做类似的事情:
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)
唉,我收到了日志消息:
calculating split sizes
building up split locations
working on split 1/1, extracting data in RAM of 26 split elements,
totalling, 0.00015 GB, while max specified
data specified using BATCHBYTES is 0.01999 GB
... applying FUN to selected data
Error: argument "FUN" is missing, with no default
我尝试了 FUN = as.data.frame
(因为函数的结果必须是数据框)但没有成功:这样做会使 ffa_partition 成为 ffa 的副本...
如何对我的 ffdf 进行分区?
晚了两年,但我相信这可以满足您的需求:
result_list <- list()
for(letter in letters){
result_list[[letter]] <- subset(ffa, V3 == letter)
}
我正在使用 ff
和 ffbase
库来管理一个大的 csv 文件(~40Go 和 275e6 观察)。我想 split/partition 这个文件根据它的列之一(这是一个因子列)。
使用普通数据框,我会做类似的事情:
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)
唉,我收到了日志消息:
calculating split sizes
building up split locations
working on split 1/1, extracting data in RAM of 26 split elements,
totalling, 0.00015 GB, while max specified
data specified using BATCHBYTES is 0.01999 GB
... applying FUN to selected data
Error: argument "FUN" is missing, with no default
我尝试了 FUN = as.data.frame
(因为函数的结果必须是数据框)但没有成功:这样做会使 ffa_partition 成为 ffa 的副本...
如何对我的 ffdf 进行分区?
晚了两年,但我相信这可以满足您的需求:
result_list <- list()
for(letter in letters){
result_list[[letter]] <- subset(ffa, V3 == letter)
}