【发布时间】:2012-03-10 07:22:12
【问题描述】:
我的计算机上有一个中等大小的文件 (4GB CSV),但没有足够的 RAM 来读取它(在 64 位 Windows 上为 8GB)。过去我只是将它加载到集群节点上并读入,但我的新集群似乎任意将进程限制为 4GB 的 RAM(尽管硬件每台机器有 16GB),所以我需要一个短期修复.
有没有办法将 CSV 文件的一部分读入 R 以适应可用内存限制?这样我可以一次读取文件的三分之一,将其子集到我需要的行和列,然后再读取下一个三分之一?
感谢评论者指出我可以使用一些大内存技巧读取整个文件: Quickly reading very large tables as dataframes in R
我可以想到一些其他解决方法(例如,在一个好的文本编辑器中打开,删除 2/3 的观察结果,然后在 R 中加载),但如果可能的话,我宁愿避免它们。
因此,目前看来,分段阅读仍然是最好的方式。
【问题讨论】:
-
这里已经详细讨论过了,特别是JD Long的回答很有用:stackoverflow.com/questions/1727772/…
-
抱歉,这确实回答了第一个问题。显然我的 SO search-fu 需要磨练,因为我搜索但找不到它。但是,第二个问题没有得到解答:如何分段读取 .CSV 文件。
-
@mdsumner 很有趣。看起来我可以使用 read.csv.ffdf() 。想在链接的问题中回答这个问题,以便我可以投票吗? :-)
-
短期修复可能是询问您的集群管理员如何在集群节点上保留超过 4GB 的空间!在我们的集群上,它只是将##BSUB -m 8G(或其他东西)粘贴到您的批处理提交文件中,然后等待稍长一点的时间让两个插槽在同一个节点上空闲。
-
如果您需要更多,我们的集群有 40 个节点,每个节点都有 96GB RAM。我认为我们的集群管理员可能正在补偿一些东西。