从 csv 文件中读取数据需要很长时间 [重复]

Posted

技术标签:

【中文标题】从 csv 文件中读取数据需要很长时间 [重复]【英文标题】:Long time needed to read data from a csv file [duplicate] 【发布时间】:2014-03-19 23:40:10 【问题描述】:

我应该阅读一个大的 CSV 文件(超过 30000 行和 10000 列)。不知何故,我应该逐列读取数据。这是我的代码:

con<-file("D:\\Data.csv","r")
datalist<-list()
for(spalte in 5:5)

  for(i in 1:20000)
  

    line<-readLines(con,n=1,warn=FALSE)
    m<-list(as.integer(unlist(strsplit(line,split=","))))
    datalist<-c(datalist,sapply(m,"[[",spalte))

  


但是这段代码需要 4 分钟才能读取一列(在本例中为第 5 列)。我应该怎样做才能更快地完成这项工作?

【问题讨论】:

是否绝对需要逐行读取数据?为什么? 如果我使用read.csv 方法,我会收到有关文件大小的错误 【参考方案1】:

不要为已解决的问题发明自己的解决方案。如果read.csv 出现内存不足错误,那么:

1) 确保您使用的是 64 位 R(无 4GB RAM 限制)。

2) 忽略一些不需要节省空间的行。 colbycol package 对此很有用。

3) 将文件读入数据库,然后从那里导入您需要的内容。有很多解决方案;首先阅读this SO question 的答案。

4) 购买更多 RAM,或在具有更多 RAM 的远程工作站(可能是云服务器)上运行分析,或使用内存不足的软件包。请参阅Task View on High Performance Computing。

【讨论】:

谢谢,但问题是我需要 csv 文件中的所有数据 有很多选择;最好的取决于您的设置。您使用的是 64 位 R 吗?你的机器上有多少内存?你能得到或购买更多吗?您可以访问具有更多 RAM 的工作站,或使用云计算服务吗?您是否有权访问任何可用作暂存区的数据库?您确定需要全部 30k 列吗? @Kaja 你知道这大约是 2.2 Gb 的数据吗?在一台典型的计算机上分析这一点既不容易,也不容易。【参考方案2】:

试试 fread(文件名)。它在 data.table 包中。读取大文件非常快。

system.time(fread('abc.csv'))
user  system elapsed 
0.41    0.00    0.40 

system.time(read.csv('abc.csv'))
user  system elapsed 
2.28    0.02    2.29 

如果您遇到内存问题,那么正如 Richie 建议的那样,使用 64 位并尝试在服务器上运行,或者您甚至可以获得具有大 RAM 的 Amazon EC2 机器。

【讨论】:

问题是,我没有足够的内存 你也可以试试 library("ff") x

以上是关于从 csv 文件中读取数据需要很长时间 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在使用 apache poi 从扩展名为 xlsx 的 Excel 文件中读取数据时,需要很长时间

从 databasechangelog 读取 Liquibase 需要很长时间

Spark - 加载许多小 csv 需要很长时间

需要 PHP 逐行处理的 CSV 需要很长时间(或超时)才能进入 SQL 数据库

GCP 云上的长时间运行作业

在 Jupyter Windows 上使用 pool 并行读取多个文件需要很长时间: