分段读取 CSV 文件的策略?

2024-02-24

我的计算机上有一个中等大小的文件 (4GB CSV),但没有足够的 RAM 来读取该文件(64 位 Windows 上为 8GB)。在过去,我只是将其加载到集群节点上并将其读入,但我的新集群似乎任意将进程限制为 4GB RAM(尽管每台机器的硬件有 16GB),所以我需要一个短期修复。

有没有办法将 CSV 文件的一部分读入 R 以适应可用内存限制?这样我就可以一次读入文件的三分之一,将其子集化为我需要的行和列,然后读入下一个三分之一?

感谢评论者指出我可以使用一些大的内存技巧来读取整个文件:在 R 中快速读取非常大的表作为数据帧 https://stackoverflow.com/questions/1727772/quickly-reading-very-large-tables-as-dataframes-in-r

我可以想到其他一些解决方法(例如,在一个好的文本编辑器中打开,删除 2/3 的观察结果,然后加载到 R 中),但如果可能的话,我宁愿避免它们。

因此,分段阅读似乎仍然是目前最好的方法。


查看此线程后,我注意到没有提到此问题的明显解决方案。使用连接!

1) 打开与您的文件的连接

con = file("file.csv", "r")

2)使用read.csv读取代码块

read.csv(con, nrows="CHUNK SIZE",...)

旁注:定义 colClasses 将大大加快速度。确保将不需要的列定义为 NULL。

3)做你需要做的事

4)重复。

5)关闭连接

close(con)

这种方法的优点是连接。如果省略此步骤,可能会减慢速度。通过手动打开连接,您实际上打开了数据集,并且在调用 close 函数之前不会将其关闭。这意味着当您循环访问数据集时,您将永远不会失去您的位置。假设您有一个包含 1e7 行的数据集。还假设您想要一次加载 1e5 行的块。由于我们打开连接,我们通过运行获取前 1e5 行read.csv(con, nrow=1e5,...),然后为了获得我们运行的第二个块read.csv(con, nrow=1e5,...)还有,等等......

如果我们不使用连接,我们将以相同的方式获得第一个块,read.csv("file.csv", nrow=1e5,...),但是对于下一个块,我们需要read.csv("file.csv", skip = 1e5, nrow=2e5,...)。显然这是低效的。尽管我们刚刚读取了 1e5 行,但我们必须重新找到 1e5+1 行。

最后,data.table::fread是很棒的。但你不能通过它连接。所以这个方法行不通。

我希望这可以帮助别人。

UPDATE

人们不断对这篇文章进行投票,所以我想我应该再补充一个简短的想法。新的readr::read_csv, like read.csv,可以通过连接。然而,它是做广告的 http://blog.rstudio.org/2015/04/09/readr-0-1-0/大约快 10 倍。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分段读取 CSV 文件的策略? 的相关文章

  • 如何删除箱线图上的刻度线

    我试图从箱线图中删除 x 轴刻度线 但保留与刻度线关联的标签 这在基础 R 中可能吗 colors lt c lightskyblue3 gray78 gold1 wheat1 boxplot avgscore module data mi
  • 在 R 中向散点图添加线条

    如何向图表添加线条 我做了以下 dat lt data frame xvar 1 20 rnorm 20 sd 10 yvar 1 20 rnorm 20 sd 10 zvar 1 20 rnorm 20 sd 10 plot dat 1
  • 使用 pracma::findpeaks 识别持续峰值

    我的语法有问题peakpat内的选项findpeaks内的函数pramcaR 包 v 2 1 1 我使用的是 R 3 4 3 x64 Windows 我希望该函数能够识别可能有两个重复值的峰值 并且我相信该选项peakpat这就是我能做到的
  • 选择 R 中的数据表中隐藏时(在绿色加号下方)列的显示顺序

    Context 使用 DataTables 库制作交互式表格时 当屏幕宽度对于列的数量和宽度来说太窄时 列将隐藏在绿色 号下 我有一个非常宽的表格 有 20 多列 其中一些内容非常冗长 因此某些列在所有屏幕宽度下总是隐藏的 每次隐藏新列时
  • pyomo + 网状错误 6 句柄无效

    我正在尝试运行pyomo优化 我收到错误消息 Error 6 The handle is invalid 不知道如何解释它 环顾四周似乎与特权有关 但我不太明白 在下面找到完整的错误跟踪以及重现它的玩具示例 完整的错误跟踪 py run f
  • API 请求和curl::curl_fetch_memory(url, handle = handle) 中的错误:SSL 证书问题:证书已过期

    几天前 我运行了代码几个月 没有任何问题 GET url myurl query 今天我遇到一个错误 Error in curl curl fetch memory url handle handle SSL certificate pro
  • 在 R 格子包中微调点图

    我正在尝试为不同的数据集和不同的算法绘制一堆 ROC 区域 我有三个变量 方案 指定所使用的算法 数据集 是正在测试算法的数据集 以及 Area under ROC 我正在 R 中使用lattice库 命令如下 点图 方案 Area und
  • 以引用透明的方式从函数的省略号参数中提取符号

    事情又发生了 我正要按下发布答案按钮的问题被删除了 我正在寻找一种方法来从函数的省略号参数中提取绑定到符号的对象的值以及符号 也就是说 我试图以引用透明的方式从省略号中提取符号 我尝试过使用替代品和lazy dots 但没有成功 funct
  • r 中训练和测试数据的最小最大缩放/归一化

    我正在创建一个函数 它将训练集和测试集作为其参数 最小 最大缩放 标准化并返回训练集并使用这些same最小值和最小 最大范围的值 标准化并返回测试集 到目前为止 这是我想出的功能 min max scaling lt function tr
  • 使用 Shiny 发布平行坐标图表时出现“错误:路径[1]="”:没有这样的文件或目录”

    我有一个似乎很常见但我还没有找到解决方案的问题 当尝试使用 rCharts Parcoords 发布 Web 应用程序时 出现以下错误 错误 路径 1 没有这样的文件或目录 奇怪的是 该应用程序在我的笔记本电脑上运行得很好 下面是我正在使用
  • 更改闪亮 R 中的默认浏览器

    我在 RStudio 中使用 01 hello 虽然在 IE 中默认打开程序时它不会显示直方图 但即使在 Chrome 中 滑块也不起作用 我无法滑动条形图并看到直方图中的变化 如何更改 R 中的默认浏览器 以便闪亮启动 Chrome 而不
  • 文本挖掘 pdf 文件/词频问题

    我正在尝试挖掘一篇具有丰富 pdf 编码和图表的文章的 pdf 我注意到 当我挖掘一些 pdf 文档时 我得到的高频词是 phi taeoe toe sigma gamma 等 它与某些 pdf 文档配合良好 但与其他文档配合使用时却得到这
  • 旋转 Markdown 的表格 pdf 输出

    我想将 pdf 上的表格输出旋转 90 度 我正在使用 Markdown 生成报告并kable循环显示表格 如果可以的话我想继续使用kable因为还有很多其他依赖于它的东西我没有包含在这个 MWE 中 这是一个简单的例子 使用iris数据集
  • 计算 R 中各列的唯一值

    我正在尝试创建一个新变量 其中包含来自两个不同列的字符串值的唯一计数 所以我有这样的东西 例如 A tibble 4 x 2 names partners
  • 如何在 R 中匹配多个 ggplot2 图中的调色板?

    自从被问到这个问题以来已经有一段时间了 但我知道一个事实 我很快就会提取新数据 我想弄清楚如何用这种技术来绘制它 看起来评论和答案中的人知道如何做到这一点 但我无法完全弄清楚所给我的内容 还有人想尝试一下吗 我正在尝试使用具有多个级别的因子
  • 所有 x 轴标签未以 45 度显示

    I m having the code as like below But I m not getting all the x axis labels and it is not displaying in 45 degree when I
  • 投资决策:R中的NPV、IRR、PB计算

    我正在尝试计算不同数量项目的净现值 NPV 内部收益率 IRR 和投资回收期 PB 时间 以评估哪个投资项目提供最佳回报 到目前为止 我可以为每个项目单独计算几行代码 但我想做的是 编写一个函数 它接受一个包含许多不同项目及其现金流的矩阵
  • 如何从 R 读取 PDF 元数据

    我们很好奇 有没有一种方法可以从 R 读取 PDF 元数据 例如下面显示的信息 通过搜索我对此无能为力 r pdf metadata在当前的问题库中 非常欢迎任何指点 我想不出纯 R 的方法来执行此操作 但您可能可以安装您最喜欢的 PDF
  • 无法更改 RStudio 中的 R 版本

    我的 RStudio V 0 99 491 无法更改 R 版本 我以平常的方式行事Global Options gt R Version 然后它挂起并且不再工作或反应 R 运行良好的初始版本是R 3 1 0 我以前从未遇到过这样的问题 也许
  • 线性判别分析图

    如何将样本 ID 行号 作为标签添加到此 LDA 图中的每个点 library MASS ldaobject lt lda Species data iris plot ldaobject panel function x y points

随机推荐

  • github api v3 从 master 以外的特定分支获取文件内容

    如何使用 github v3 内容 api 从特定分支获取文件内容http developer github com v3 repos contents http developer github com v3 repos contents
  • 离子选择无标签

    我在同一行中有一个 Ionic 选择作为输入 因此我想显示没有标签的选择 代码如下
  • Xcode:框架的目标成员资格?

    我对您的 Xcode 项目的最右栏有疑问 图片在这里 http img192 imageshack us img192 971 picture9u png 苹果的文档告诉我关于该专栏的内容 目标会员 标记的列 通过目标图标指示是否 该文件包
  • 如何将 GitHub 问题与分支关联?

    我在 gh 上提交的几乎每个问题都涉及特定分支上的代码 github 是否有任何机制将问题链接到分支 我需要按分支过滤问题 这样我就不会被其他功能分支中的问题分散注意力 有没有办法做到这一点 我知道可以 滥用 使用里程碑来达到类似的效果 但
  • 当ng-model在控制器中初始化时,Angularjs select ng-change不会被触发

    我有我的选择 就像这样
  • W/ManagedChannelImpl:[{0}] 无法解析名称。状态={1}

    我正在开发 Android 应用程序 并且实现了 FireStore 现在我不断收到此错误 它也会重复 W ManagedChannelImpl 0 Failed to resolve name status 1 有人知道这是什么吗 您的应
  • mvc 3 razor 使用 jquery 调用服务器端函数

    我正在使用此代码从服务器获取部分视图 并将其放入 div 中 ajax type POST url MyControler MyAction success function result partialView html result e
  • 存储过程事务

    我以前从未使用过事务 提交和回滚 现在我需要使用一个 我已经在网上检查了一些示例 以确保我实际上正确使用了它 但我仍然不确定我的编码是否正确 我希望有人能够审查并建议我这是否正确 基本上我有两个数据库用于一个应用程序 一种是存档 意味着不再
  • 从字符串中检索图像 url

    我正在解析一个 xml 文件 我可以 NSLog 解析 但我的问题是我需要从这个 字符串 获取图像 url p a href http www bubblesurprise com WPRESS APP wp content uploads
  • 通过 XML 设置 AdMob 横幅以匹配父级宽度

    我正在尝试设置 AdMob 横幅广告以匹配其父宽度 我尝试作为示例
  • 接口如何使单元测试和模拟变得更容易?

    人们常说 接口使模拟和单元测试变得更加容易 接口如何帮助解决这个问题 这是接口的本质提供许多实现 从而启用模拟 特别是在集成测试中 您可以提供依赖系统模型的版本 例如 Web 服务 而不是实际调用一个依赖系统甚至一个模块 或者一个复杂且难以
  • 带 LDAP 的 BitNami GitLab Stack 5.1.0-2

    I am 配置 https github com gitlabhq gitlabhq blob master doc install installation md ldap authenticationLDAP 用于BitNami Git
  • 如何在本地部署ssrs?

    如何在本地计算机上部署 ssrs 我正在使用 ssrs 2005 我不确定 2005 年的情况 但在 2008 年 您右键单击项目 gt 属性并更改以下内容 目标数据集文件夹 文件夹名称 DataSet目标数据源文件夹 文件夹名称 数据源目
  • org.apache.axis2.AxisFault:在 Web 服务中传递对象数组时,未知类型无法序列化

    我创建了一个以 DTO 作为参数的 Web 服务 DTO 包含一个对象数组 我已经生成了 WSDL 框架和客户端 如果我传递字符串数组 我会尝试调用 Web 服务 Serialized array new String a n 效果很好 现
  • 如何在 WordPress 多站点中显示最近的全局帖子

    我在 ayp no 上运行一个 wordpress 多站点 我正在尝试找出一种方法来呈现所有子站点的徽标和所有博客的最新帖子 我知道有一个 wpmudev 高级插件 但我希望有一些编码我可以自己做 好吧 显然不是我自己 但至少在这里问一下并
  • 在 Swift 中更改 UITabBar selectedItem

    如何以编程方式更改 UITabBar 中的选定项目 Swift 3 及更高版本 从 Swift 3 开始 您还可以使用 tabBarController selectedIndex 0 or any other existing index
  • 优雅地崩溃内核

    后续 CUDA 停止所有其他线程 https stackoverflow com questions 3735786 cuda stop all other threads 我正在寻找一种在发生 不良情况 时退出内核的方法 编程手册说 NV
  • graphviz 中的子图布局

    我有显示两个子图的代码 graph rankdir LR subgraph cluster01 label t 0 a0 label A a1 label B a2 label C a5 label E a0 a1 a1 a2 a2 a0
  • 使用自定义表单替换部分 Outlook 客户端窗口

    我正在为 Outlook 客户端开发 VSTO 应用程序 我正在尝试在 Outlook 客户端窗口的部分中打开我的表单 该部分在下图中以红色突出显示 我认为我不能使用表单区域 因为它们替换了单个项目的视图 所以基本上我想做的是当我单击工具栏
  • 分段读取 CSV 文件的策略?

    我的计算机上有一个中等大小的文件 4GB CSV 但没有足够的 RAM 来读取该文件 64 位 Windows 上为 8GB 在过去 我只是将其加载到集群节点上并将其读入 但我的新集群似乎任意将进程限制为 4GB RAM 尽管每台机器的硬件