导入大型数据集[重复]

问题描述 投票:0回答:2

我有一个7GB的CSV文件。由于文件太大,我实际上无法在R或Excel中打开文件,因此无法以任何方式对其进行操作。关于如何将如此大的数据集导入R的任何想法或技巧?

r import size large-data
2个回答
1
投票

尝试:

library(RevoScaleR)
MyCsv <- file.path(rxGetOption("sampleDataDir"), "mycsv.csv")
MyXdf <- "mycsv.xdf"

这会将文件转换为xdf文件,该文件使用算法加载和读取文件。但是,使用这种格式的数据将需要像FYI一样使用RevoScaleR软件包中的其他功能。


1
投票

考虑企业数据库以导入并打开大型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文件,提取不需要的列,并删除分析不需要的长文本,但确实占用了字节资源。

© www.soinside.com 2019 - 2024. All rights reserved.