Ich habe 900000 CSV-Dateien, die ich in einem großen data.table
kombinieren möchte. Für diesen Fall habe ich eine for loop
erstellt, die jede Datei einzeln liest und sie der data.table
hinzufügt. Das Problem ist, dass es langsamer wird und die Menge an Zeit exponentiell zunimmt. Es wäre toll, wenn mir jemand helfen könnte, den Code schneller laufen zu lassen. Jede der csv-Dateien hat 300 Zeilen und 15 Spalten. Der Code verwende ich so weit:Lesen mehrerer csv-Dateien schneller in data.table R
library(data.table)
setwd("~/My/Folder")
WD="~/My/Folder"
data<-data.table(read.csv(text="X,Field1,PostId,ThreadId,UserId,Timestamp,Upvotes,Downvotes,Flagged,Approved,Deleted,Replies,ReplyTo,Content,Sentiment"))
csv.list<- list.files(WD)
k=1
for (i in csv.list){
temp.data<-read.csv(i)
data<-data.table(rbind(data,temp.data))
if (k %% 100 == 0)
print(k/length(csv.list))
k<-k+1
}
R nicht das richtige Werkzeug sein kann; Siehe Spacedmans Antwort hier, zum Beispiel http://stackoverflow.com/a/11433740/210673 – Aaron
Es mag Blasphemie in einer [tag: r] -Frage sein, aber 'csvstack' kann schnelle Arbeit der Kombination machen: http: // csvkit.readthedocs.org/de/0.9.1/scripts/csvstack.html ('pip install csvkit'). Sie werden definitiv 'data.table :: fread' für diese resultierende GIANT-CSV-Datei verwenden wollen. – hrbrmstr
Zwei Punkte: sogar mit einer ungefähren Größe von nur 4 Byte für jeden einzelnen Eintrag wird die endgültige Größe im Speicher 4 Bytes * 15 Spalten * 300 Zeilen * 900000 Dateien/1024^3> = 15 GB. Mit 'rbind()' und anderen speicherintensiven Kopiermethoden wird der Betrag verdoppelt. –