gpt4 book ai didi

r - 在第二行的 R WITH 标题中导入大型 .CSV 的延迟时间很长

转载 作者:行者123 更新时间:2023-12-04 18:06:51 26 4
gpt4 key购买 nike

我正在开发一个应用程序,该应用程序从 .csv 中提取数据,然后对其进行一些计算。挑战在于 .csv 的大小可能非常大。我在这里查看了许多讨论使用各种函数和库导入大型 .csv 文件的帖子。一些例子如下:

### size of csv file: 689.4MB (7,009,728 rows * 29 columns) ###

system.time(read.csv('../data/2008.csv', header = T))
# user system elapsed
# 88.301 2.416 90.716

library(data.table)
system.time(fread('../data/2008.csv', header = T, sep = ','))
# user system elapsed
# 4.740 0.048 4.785

library(bigmemory)
system.time(read.big.matrix('../data/2008.csv', header = T))
# user system elapsed
# 59.544 0.764 60.308

library(ff)
system.time(read.csv.ffdf(file = '../data/2008.csv', header = T))
# user system elapsed
# 60.028 1.280 61.335

library(sqldf)
system.time(read.csv.sql('../data/2008.csv'))
# user system elapsed
# 87.461 3.880 91.447

我面临的挑战是这个。有问题的 .csv 在第二行和第一行有标题,其中填充了无用的信息。我最初的方法(成功应用于小于 5MB 的小文件)是在删除第一行后使用以下代码导入小文件。
report_query_X_all_content = readLines("C:/Users/.../report_queryX_XXX-XXX-XXXX.csv")
skip_first = report_query_X_all_content[-1]
report_query_X = read.csv(textConnection(skip_first), header = TRUE, stringsAsFactors = FALSE)

不幸的是,一旦基本文件的大小超过 70 或 80MB,导入时间似乎呈指数增长。我一直在查看的大多数函数,例如 fread(),都要求您直接传入 .csv。正如您在我的实现中看到的那样,我在删除所需的行后通过 textConnection 传入了 skip_first。我遇到的问题是,对于 70 或 80MB 的文件,存在不成比例的时间滞后。我在将近 55 分钟前开始了一次导入,但它仍在为 79MB 的文件运行。对于上下文,skip_first 出现在内存中,大小约为 95MB。我的下一个导入是大约 785MB。 有没有人对如何使用更大的数据文件完成我想要做的事情有任何建议或建议。最终,此解决方案将应用于大小为 1 - 4 GB 的 .csv 文件,我担心 textConnection() 步骤会导致瓶颈。

最佳答案

这是我最终使用 & 的解决方案,效果很好:

start_time <- Sys.time() # Calculate time diff on the big files

library(bit64)

report_query_X <- fread('C:/Users/.../report_queryX_XXX-XXX-XXXX.csv', skip = 1, sep = ",")

end_time <- Sys.time() # Calculate time diff on the big files
time_diff <- end_time - start_time # Calculate the time difference
# time_diff = 1.068 seconds

此实现所花费的总时间为 78.9MB 文件需要 1.068 秒 ,这是极好的。使用 fread() 跳过会有很大的不同。我最初使用 fread() 时确实收到了一条警告消息,并指出:
Warning message:
In fread("C:/Users/.../report_queryX_XXX-XXX-XXXX.csv", :
Some columns have been read as type 'integer64' but package bit64 isn't loaded. Those columns will display as strange looking floating point data. There is no need to reload the data. Just require(bit64) to obtain the integer64 print method and print the data again.

这就是为什么我最终使用 install.packages("bit64") 安装 bit64,然后使用库函数调用它的原因;库(位64)

编辑:请注意,我刚刚尝试在 251MB 文件上使用此调用,总导入时间为 1.844106 秒。

关于r - 在第二行的 R WITH 标题中导入大型 .CSV 的延迟时间很长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24921387/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com