pisz.csv dla dużych danych.tabela

Mam data.table, który nie jest zbyt duży (2 GB), ale z jakiegoś powodu write.csv zajmuje bardzo dużo czasu, aby go zapisać (nigdy nie skończyłem czekać) i wydaje się używać Tony pamięci RAM, aby to zrobić.

Próbowałem przekonwertować data.table na data.frame, chociaż to nie powinno nic zrobić, ponieważ data.table rozszerza data.frame. czy ktoś na to wpadł?

Co ważniejsze, jeśli zatrzymasz go za pomocą Ctrl-C , R wydaje się nie zwracać pamięci.

Author: zx8754, 2012-08-18

1 answers

Aktualizacja 08.04.2016:

fwrite został niedawno dodany do danych.wersja rozwojowa pakietu table. Działa również równolegle(w domyśle).

# Install development version of data.table
install.packages("data.table", 
                  repos = "https://Rdatatable.github.io/data.table", type = "source")

# Load package
library(data.table)

# Load data        
data(USArrests)

# Write CSV
fwrite(USArrests, "USArrests_fwrite.csv")

Zgodnie ze szczegółowymi testami porównawczymi pokazanymi pod .tabela, fwrite jest ~17x szybszy niż write.csv tam (YMMV).


Aktualizacja 15.12.2015:

W przyszłości może istnieć Funkcja fwrite w pakiecie data.table, Zobacz: https://github.com/Rdatatable/data.table/issues/580 . W tym wątku linkowany jest GIST, który zapewnia prototyp dla takiej funkcji przyspieszającej proces o współczynnik 2 (według autora, {25]}https://gist.github.com/oseiskar/15c4a3fd9b6ec5856c89).

ORYGINALNA ODPOWIEDŹ :

Miałem te same problemy (próbując napisać jeszcze większe pliki CSV) i zdecydowałem się w końcu na używanie plików CSV.

Polecam używać SQLite jak jest znacznie szybciej niż radzenie sobie z plikami CSV:

require("RSQLite")
# Set up database    
drv <- dbDriver("SQLite")
con <- dbConnect(drv, dbname = "test.db")
# Load example data
data(USArrests)
# Write data "USArrests" in table "USArrests" in database "test.db"    
dbWriteTable(con, "arrests", USArrests)

# Test if the data was correctly stored in the database, i.e. 
# run an exemplary query on the newly created database 
dbGetQuery(con, "SELECT * FROM arrests WHERE Murder > 10")       
# row_names Murder Assault UrbanPop Rape
# 1         Alabama   13.2     236       58 21.2
# 2         Florida   15.4     335       80 31.9
# 3         Georgia   17.4     211       60 25.8
# 4        Illinois   10.4     249       83 24.0
# 5       Louisiana   15.4     249       66 22.2
# 6        Maryland   11.3     300       67 27.8
# 7        Michigan   12.1     255       74 35.1
# 8     Mississippi   16.1     259       44 17.1
# 9          Nevada   12.2     252       81 46.0
# 10     New Mexico   11.4     285       70 32.1
# 11       New York   11.1     254       86 26.1
# 12 North Carolina   13.0     337       45 16.1
# 13 South Carolina   14.4     279       48 22.5
# 14      Tennessee   13.2     188       59 26.9
# 15          Texas   12.7     201       80 25.5

# Close the connection to the database
dbDisconnect(con)

Aby uzyskać więcej informacji, zobacz http://cran.r-project.org/web/packages/RSQLite/RSQLite.pdf

Możesz również użyć oprogramowania typu http://sqliteadmin.orbmu2k.de / aby uzyskać dostęp do bazy danych i wyeksportować bazę danych do CSV itp.

--

 48
Author: majom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-12 11:56:59