我有一个7GB的CSV文件。由于文件太大,我实际上无法在R或Excel中打开文件,因此无法以任何方式对其进行操作。关于如何将如此大的数据集导入R的任何想法或技巧?
尝试:
library(RevoScaleR)
MyCsv <- file.path(rxGetOption("sampleDataDir"), "mycsv.csv")
MyXdf <- "mycsv.xdf"
这会将文件转换为xdf文件,该文件使用算法加载和读取文件。但是,使用这种格式的数据将需要像FYI一样使用RevoScaleR软件包中的其他功能。
考虑企业数据库以导入并打开大型CSV文件。 R可以使用RODBC包连接到任何ODBC兼容数据库,包括MS Access,MySQL,SQL Server,SQLite,Oracle等。关系型索引数据库可以很好地扩展大数据。从那里,您甚至可以将一定数量的数据查询到数据框中,选择特定的列并通过各种条件过滤行。
library(RODBC)
# LISTS ALL INSTALLED ODBC SOURCES (DRIVERS AND DSNs)
odbcDataSources()
# SQL SERVER
myconn <-odbcDriverConnect('driver={SQL Server};server=SOMESERVER;database=DBName;
trusted_connection=yes;UID=username;PWD=password')
df1 <-sqlFetch(myconn, "dbo.Table1") # WHOLE TABLES/VIEWS
df2 <- sqlQuery(myconn, "select * from dbo.Table1 where group = 1") # SELECT QUERIES
close(myconn)
# MySQL
myconn <-odbcConnect('somedsn;host=localhost;database=DBName;UID=username;PWD=password')
df1 <-sqlFetch(myconn, "Table1")
df2 <- sqlQuery(myconn, "select * from Table1")
close(myconn)
# MS ACCESS
myconn <-odbcDriverConnect('driver={Microsoft Access Driver (*.mdb, *.accdb)};
DBQ=C:\\PathTo\\DatabaseName.accdb')
df1 <-sqlFetch(myconn, "Table1")
df2 <- sqlQuery(myconn, "select * from Table1")
close(myconn)
此外,您在统计包和数据库中的数据处理中都学到的一件事是,列比行更耗费资源。范围很广的数据集占用的存储空间要比很长。例如,Excel xlsx的列限制为2 ^ 14或16,384,但行限制为2 ^ 20或1,048,576。 MySQL对每个表的硬限制为4,096列; SQL Server 1,024(用于非宽表);和MS Access在255,除了对内存的限制外,没有一个数据库维护行的声明限制。
对于统计软件包(R的竞争对手),SAS和Stata的限制为32,767个变量,其变通办法取决于计算机的设置和类型。令人惊讶的是,IBM的SPSS最多可以包含21.5亿个变量!至于R,对于任何矢量,矩阵,数组,列表或数据帧列,都有2^31 - 1 elements的历史数字(由于32位索引的遗留问题)。但是像Python data frames一样,数据集的大小和处理应该是计算机RAM容量的函数。
话虽如此,请考虑分解CSV文件,提取不需要的列,并删除分析不需要的长文本,但确实占用了字节资源。