2015-07-15 5 views
1

У меня есть файл csv, размер которого равен 7 ГБ. На самом деле я не могу открыть файл в R или excel из-за его гигантского размера и, следовательно, не могу каким-либо образом манипулировать им. Любые мысли или трюки о том, как импортировать такой большой набор данных в R?Импорт больших данных в R

+1

Сколько у вас памяти? – Gregor

+2

Недостаточно очевидно. Но я думаю, что это не имеет значения. Я хочу знать, что я могу сделать ПОТОМУ ЧТО У меня недостаточно памяти для работы. Я не могу себе представить, что R может обрабатывать такой большой набор данных, независимо от размера памяти. Разве это не так? – theforestecologist

+1

Просьба предоставить некоторую информацию о количестве памяти, которую вы имеете, и о типе данных, содержащихся в CSV (числовой/символ, если он разрежен или нет). На этот вопрос нет ни одного ответа. –

ответ

2

Try:

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

Это преобразует файл в файл XDF, который использует алгоритмы для загрузки и чтения файла. Однако работа с данными в этом формате потребует использования других функций из пакета RevoScaleR, как FYI.

2

Рассмотрите базу данных предприятия, чтобы импортировать и открыть большой файл CSV. R может подключаться к любой базе данных, совместимой с ODBC, включая MS Access, MySQL, SQL Server, SQLite, Oracle и т. Д., Используя пакет RODBC. Реляционные, индексированные базы данных хорошо масштабируются с большими данными. И оттуда вы даже можете запросить определенное количество этих данных в фреймворке данных, выбирая конкретные столбцы и фильтруя строки по различным критериям.

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 имеет жесткий предел 4096 столбцов на таблицу; SQL Server - 1,024 для нешироких таблиц; и MS Access на 255, при этом ни одна из баз данных не поддерживает объявленный предел для строк, кроме ограничений для памяти.

Для статистических пакетов (конкурентов R) SAS и Stata имеют ограничение 32 767 переменных с обходными способами в зависимости от настроек и типов компьютеров. Удивительно, что SPSS IBM может содержать до 2,15 миллиарда переменных! Что касается R, существует историческая цифра 2^31 - 1 elements для любого столбца вектора, матрицы, массива, списка или столбца данных (из-за 32-битного наследия индексирования). но как Python data frames, размер и обработка набора данных должны быть функцией емкости ОЗУ компьютера.

С учетом сказанного, рассмотрите разбивку CSV-файла, извлечение ненужных столбцов и удаление длинных текстов, которые не нужны для анализа, но занимают ресурсы в байтах.

Смежные вопросы