我有一个巨大的csv文件大约1500万行,大小在3G左右.
我想把这个文件逐个读成R,每次只选择那些适合某种条件的行.
例如,其中一个列被称为产品类型,所以我只需要将一种类型的产品读入R中,然后处理它然后输出结果,之后我转移到另一种类型的产品......
到目前为止,我已经阅读了不同的方法,例如将大文件上传到数据库中,或者按colbycol逐列读取,或者通过ff读取一大块行...
任何纯R解决方案都能解决我的问题吗?
ROL*_*OLO 20
你可以使用这个RSQLite包:
library(RSQLite)
# Create/Connect to a database
con <- dbConnect("SQLite", dbname = "sample_db.sqlite")
# read csv file into sql database
# Warning: this is going to take some time and disk space,
# as your complete CSV file is transferred into an SQLite database.
dbWriteTable(con, name="sample_table", value="Your_Big_CSV_File.csv",
row.names=FALSE, header=TRUE, sep = ",")
# Query your data as you like
yourData <- dbGetQuery(con, "SELECT * FROM sample_table LIMIT 10")
dbDisconnect(con)
Run Code Online (Sandbox Code Playgroud)
下次要访问数据时,可以省略dbWriteTable,因为SQLite表存储在磁盘上.
注意:将CSV数据写入SQLite文件不会先将所有数据加载到内存中.因此,您最终将使用的内存将限制为查询返回的数据量.
只能使用R来执行此操作:
read.csv指定colClasses和从文件中读取一行nrows=1虽然以上是可能的,但我不认为这是可取的.通过将数据加载到数据库中,然后从R内部查询数据库,可能更好地完成此类事情.