【问题标题】:Best practices for storing and using data frames too large for memory?存储和使用对于内存来说太大的数据帧的最佳实践?
【发布时间】:2010-12-24 22:49:22
【问题描述】:

我正在处理一个大型数据框,并且遇到了 RAM 限制。此时,我可能需要使用磁盘上的序列化版本。有a few packages 支持内存不足操作,但我不确定哪一个适合我的需要。我更愿意将所有内容都保存在数据框中,因此ff 包看起来令人鼓舞,但仍然存在我无法解决的兼容性问题。

当您意识到您的数据已达到内存不足规模时,首先要使用的工具是什么?

【问题讨论】:

    标签: r out-of-memory


    【解决方案1】:

    你可能想看看这些包:

    • ff 用于“平面文件”存储和非常高效的检索(可以执行 data.frames;不同的数据类型)
    • bigmemory 用于 R 内存不足但仍在 RAM(或文件支持)中使用(只能做矩阵;相同的数据类型)
    • biglm 用于与 lm()glm() 样式模型拟合的内存不足模型。

    还可以查看High-Performance Computing 任务视图。

    【讨论】:

      【解决方案2】:

      如果您正在处理内存问题,您应该尝试以下步骤:

      1. 清除消耗 RAM 的附加进程。确保不要打开带有许多选项卡的浏览器,因为它们似乎会消耗大量 RAM。

      2. 完成第 1 步后,了解数据集文件的结构。为此,请使用 read.csv(nrow=100)。通过这样做,您将了解什么是列和列结构。如果您发现任何列无用,请将其删除。

      3. 一旦你知道了列结构(colclasses),你就可以一次导入整个数据框..

      这里是示例代码:

      initial <- read.table("datatable.txt", nrows = 100)
      classes <- sapply(initial, class)
      tabAll <- read.table("datatable.txt", colClasses = classes)
      
      1. 使用 fread() 读取大型数据帧。

      2. 如果仍然不能解决问题,则将数据集分成两部分,将行数分成相等的两部分,然后在应用降维技术后合并它们。

      希望对你有帮助。

      【讨论】:

        【解决方案3】:

        我会说disk.frame 非常适合此类任务。我是包的主要作者。

        与限制可以轻松处理的数据类型的ffbigmemory 不同,它尝试“模仿”data.frames 并提供dplyr 动词来操作数据。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-09-18
          • 2011-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多