【发布时间】:2021-12-31 01:44:45
【问题描述】:
我有一个ffdf 的列表,如果将其加载到 RAM 而不是使用 ff 包,它会占用大约 76GB 的 RAM。以下是他们各自的dim()
> ffdfs |> sapply(dim)
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 11478746 12854627 10398332 404567958 490530023 540375993 913792256
[2,] 3 3 3 3 3 3 3
[,8] [,9] [,10] [,11] [,12] [,13] [,14]
[1,] 15296863 11588739 547337574 306972654 11544523 255644408 556900805
[2,] 3 3 3 3 3 3 3
[,15] [,16] [,17]
[1,] 13409223 900436690 15184264
[2,] 3 3 3
我想检查每个ffdf中的重复次数,所以我做了以下操作:
check_duplication <- sample_cols |> sapply(function(df) {
df[c("chr","pos")] |> duplicated() |> sum()
})
它可以工作,但速度非常慢。
我在 HPC 上,我有大约 110GB RAM 和 18CPU。
我是否可以调整任何其他选项或设置来加快流程?谢谢。
【问题讨论】:
-
你读过
vignette("parallel", "parallel")吗?您可以相对轻松地并行化sapply调用。 -
给定 110GB 的 RAM,您真的可以将所有内容加载到内存中吗?那为什么不把所有的东西都转换成
data.tables 然后做那些计算呢?在我的笔记本电脑上使用较小的数据集(1e6 行),转换后的计算速度大约快 30 倍。 -
@ekoam 我实际上试图将所有内容加载到 RAM 中,但是当我尝试计算
check_duplication时,该过程花费了这么长的时间,整个 R 控制台通过 Linux 系统获取了Killed。 . 我不知道为什么,但我怀疑是内存问题,所以我切换到ff,至少在几个小时后返回结果。 -
@MikaelJagan 我确实尝试过
parallel::mclapply,但它给我带来了另一个问题:它不会返回每个元素结果。错误是Warning message: In mccollect(jobs) : 4 parallel jobs did not deliver results -
看看my benchmark -
sapply比替代品更占用内存。扩展性不如替代品。