Best practices for storing and using data frames too large for memory?
我正在使用大型数据框,并且已经遇到RAM限制。 此时,我可能需要在磁盘上使用序列化版本。 有一些软件包支持内存不足的操作,但我不确定哪一个适合我的需求。 我宁愿将所有内容保存在数据框中,因此
当您意识到数据已经达到内存不足时,第一个可以实现的工具是什么?
你可能想看看这些包:
- ff用于'平面文件'存储和非常有效的检索(可以做data.frames;不同的数据类型)
- out-of-r-memory但仍在RAM(或文件支持)中使用的bigmemory(只能执行矩阵;相同的数据类型)
-
biglm用于
lm() 和glm() 式模型的内存模型拟合。
还可以看到高性能计算任务视图。
我会说disk.frame是这类任务的理想选择。我是该软件包的主要作者。
与限制哪些数据类型易于处理的
如果您正在处理内存问题,则应尝试以下步骤:
清除消耗RAM的额外进程。确保您没有打开包含许多选项卡的浏览器,因为它们似乎消耗了大量RAM。
完成步骤1后,了解数据集文件的结构。为此,请使用read.csv(nrow = 100)。通过这样做,您将了解什么是列和列结构。如果您发现任何列无效,请将其删除。
一旦知道列结构(colclasses),就可以一次性导入整个数据帧。
以下是示例代码:
1 2 3 | initial <- read.table("datatable.txt", nrows = 100) classes <- sapply(initial, class) tabAll <- read.table("datatable.txt", colClasses = classes) |
使用fread()读取大型数据帧。
如果它仍然没有解决问题,那么将数据集分成两部分,将行数分成两个相等的部分,然后在应用维度减少技术后合并它们。
我希望它有所帮助。