Mam wiele dużych ramek danych w R, który miałem zamiar przechowywać za pomocą redis. Jestem całkowicie nowy w Redis, ale czytałem o tym dzisiaj i używam pakietu R rredis
.Przechowywanie dużych ramek danych w redis przez R
Grałem z małymi danymi oraz zapisałem i wyszukałem małe ramki danych przy użyciu funkcji redisSet()
i redisGet()
. Jednak gdy przyszło do zapisywania moich większych dataframes (z których największa wynosi 4,3 miliona wierszy i 365MB gdy zapisany jako plik .RData) używając kodu redisSet('bigDF', bigDF)
pojawia się następujący komunikat o błędzie:
Error in doTryCatch(return(expr), name, parentenv, handler) :
ERR Protocol error: invalid bulk length
In addition: Warning messages:
1: In writeBin(v, con) : problem writing to connection
2: In writeBin(.raw("\r\n"), con) : problem writing to connection
Przypuszczalnie dlatego, że dataframe jest zbyt duży, aby go zapisać. Wiem, że redisSet zapisuje ramkę danych jako ciąg znaków, co nie jest chyba najlepszym sposobem na zrobienie tego z dużymi ramkami danych. Czy ktoś wie o najlepszy sposób to zrobić?
EDIT: Mam odtworzył błąd mój tworząc bardzo dużą atrapę dataframe:
bigDF <- data.frame(
'lots' = rep('lots',40000000),
'of' = rep('of',40000000),
'data' = rep('data',40000000),
'here'=rep('here',40000000)
)
Running redisSet('bigDF',bigDF)
daje mi błąd:
Error in .redisError("Invalid agrument") : Invalid agrument
po raz pierwszy, a następnie uruchomić go ponownie natychmiast potem I pojawia się błąd
Error in doTryCatch(return(expr), name, parentenv, handler) :
ERR Protocol error: invalid bulk length
In addition: Warning messages:
1: In writeBin(v, con) : problem writing to connection
2: In writeBin(.raw("\r\n"), con) : problem writing to connection
Dzięki
Podziel się rzeczywistym kodem, którego używasz w sformatowanym bloku kodu. Ułatwi to osobie z doświadczeniem diagnozowanie i sugerowanie poprawek. –