Hızlı okuma çok büyük bir tablo R dataframes olarak
Ben çok büyük bir tablo (30 milyon satır) isterim yük olarak bir dataframes R. read.table()
Bir çok kullanışlı özellikleri, ama göründüğü gibi bir sürü mantık uygulaması bu işleri yavaşlatır. Benim durumumda, ben varsayarak biliyorum türleri sütunlarının önünde zaman, tablo içermeyen herhangi bir sütun başlıkları ve satır adları ve henüz herhangi bir patolojik karakter var endişe etmene gerek yok.
Listesi scan()
kullanarak bir tablo okuma oldukça hızlı, örneğin olabilir biliyorum:
datalist <- scan('myfile',sep='\t',list(url='',popularity=0,mintime=0,maxtime=0)))
Ama bir dataframe için bu dönüştürmek için benim girişimleri bazı 6 kat yukarıda performansının düşmesine görünür:
df <- as.data.frame(scan('myfile',sep='\t',list(url='',popularity=0,mintime=0,maxtime=0))))
Bunu yapmanın daha iyi bir yolu var mı? Ya da belki sorun tamamen farklı bir yaklaşım oldukça?
CEVAP
Bu soru başlangıçta göremedim ve bir kaç gün sonra benzer bir soru sordu. Önceki soruma aşağı çekmek için gidiyorum, ama sqldf()
yapardık bunu nasıl açıklamak için burada bir cevap eklemek istedim.
R veri bir çerçeve içine 2 GB almak için en iyi yolu veya metin veri ve daha fazlası gibi little bit of discussion oldu. Dün bir blog post toplanma bölgesi olarak SQLite içine sqldf()
veri almak için kullanma hakkında yazdım ve sonra da R. içine SQLite emme Bu benim için gerçekten çok iyi çalışıyor. 2 GB (3 sütun, 40mm satır) < veri çekme şansım oldu; 5 dakika. Buna karşılık, read.csv
komutu bütün gece koştu ve asla tamamlanmamış.
İşte benim test kodu:
Test verileri:
bigdf <- data.frame(dim=sample(letters, replace=T, 4e7), fact1=rnorm(4e7), fact2=rnorm(4e7, 20, 50))
write.csv(bigdf, 'bigdf.csv', quote = F)
Aşağıdaki alma yordamı çalıştırmadan önce R I yeniden:
library(sqldf)
f <- file("bigdf.csv")
system.time(bigdf <- sqldf("select * from f", dbname = tempfile(), file.format = list(header = T, row.names = F)))
Aşağıdaki satırı bütün gece bırakıyorum ama asla tamamlanmamış:
system.time(big.df <- read.csv('bigdf.csv'))
En hızlı büyük veri NAs değiştirmek iç...
En hızlı Varlık olarak Ekleme Yolu Çer...
Nasıl böyle büyük mükafat olarak NSZom...
.NET karma tablo Vs Sözlük - Sözlük ka...
Neden değil't Veritabanı-Öneki.bö...