关于导入:将大型数据集导入R

Importing large data set into R

本问题已经有最佳答案,请猛点这里访问。

我有一个7GB的csv文件。 我实际上无法在R或excel中打开文件,因为它的巨大尺寸因此无法以任何方式操纵它。 关于如何将如此大的数据集导入R的任何想法或窍门?


考虑使用企业数据库导入并打开大型CSV文件。 R可以使用RODBC软件包连接到任何符合ODBC的数据库,包括MS Access,MySQL,SQL Server,SQLite,Oracle等。关系型索引数据库可以很好地扩展到大数据。从那里,您甚至可以将一定数量的数据查询到数据框中,选择特定列并按各种标准过滤行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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个元素的历史数字(由于32位索引遗留)。但与Python数据框架一样,数据集大小和处理应该是计算机RAM容量的函数。

话虽如此,考虑分解您的CSV文件,提取不需要的列,并删除分析不需要的长文本,但确实占用资源的字节数。


尝试:

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

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