Sto cercando di capire come utilizzare il pacchetto mmap
per accedere a file csv di grandi dimensioni. Più precisamente, vorreimmap e file CSV
- Creare un oggetto
mmap
da un filecsv
conmmap.csv()
; - Salvare il file creato da
mmap.csv()
contenente i dati in formato binario; - Essere in grado di "mappare i dati binari in R" utilizzando la funzione
mmap()
.
Il raggiungimento di 1. e 2. è facile: basta usare mmap.cv()
e salvare l'tempfile()
che contiene i dati binari, o modificare mmap.cv()
per accettare un parametro aggiuntivo come file di output (e modificare la linea tmpstruct <- tempfile()
di conseguenza). Ciò di cui ho problemi è 3. In particolare, ho bisogno di costruire una C-struct per i record nei dati binari dall'oggetto mmap
. Ecco un semplice esempio riproducibile:
# create mmap object with its file
library(mmap)
data(cars)
m <- as.mmap(cars, file="cars.Rmap")
colnames(m) <- colnames(cars)
str(m)
munmap(m)
Le informazioni da str()
può essere utilizzato per costruire la C-struct record.struct
che permette la mappatura del file binario cars.Rmap
tramite la funzione mmap.
> str(m)
<mmap:temp.Rmap> (struct) struct [1:50, 1:2] 4 ...
data :<externalptr>
bytes : num 400
filedesc : Named int 27
- attr(*, "names")= chr "temp.Rmap"
storage.mode :List of 2
$ speed:Classes 'Ctype', 'int' atomic (0)
.. ..- attr(*, "bytes")= int 4
.. ..- attr(*, "signed")= int 1
$ dist :Classes 'Ctype', 'int' atomic (0)
.. ..- attr(*, "bytes")= int 4
.. ..- attr(*, "signed")= int 1
- attr(*, "bytes")= int 8
- attr(*, "offset")= int [1:2] 0 4
- attr(*, "signed")= logi NA
- attr(*, "class")= chr [1:2] "Ctype" "struct"
pagesize : num 4096
dim :NULL
In questo caso, abbiamo bisogno di due integer a 4 byte:
# load from disk
record.struct <- struct(speed = integer(), # int32(), 4 byte int
dist = integer() # int32(), 4 byte int
)
m <- mmap("temp.Rmap", mode=record.struct)
inferire il diritto C-struct può essere molto poco pratico per i file CSV "largo" (vale a dire i file con decine o centinaia di colonne). Ecco la mia domanda: Come si può costruire direttamente dall'oggetto mmap m
?
Non so nulla di mmap, ma volevo solo assicurarmi che tu sappia che c'è una vignetta: http://cran.r-project.org/web/packages/mmap/vignettes/mmap.pdf –
@XuWang: grazie, sono a conoscenza della vignetta. Questo è quello che mi ha fatto passare attraverso 1 e 2. – Ryogi