Mam Rscript, który czyta w stałym strumieniu danych w postaci pliku płaskiego. Inny skrypt odbiera ten plik płaski, wykonuje pewne przetwarzanie i przetwarzanie, a następnie zapisuje wynik jako dane.frame w formacie RDS. Następnie śpi i powtarza proces.Dołącz nowe dane do istniejącej ramki danych (RDS) w R
saveRDS(tmp.df, file="H:/Documents/tweet.df.rds") #saving the data.frame
Na drugim ... n-tej iteracji, mam kod przetwarzać tylko nowe wiersze dodane do pliku płaskiego od poprzedniej iteracji. Jednakże, aby dołączyć linie delta do stałej ramki danych, muszę ją wczytać, dołączyć, a następnie zapisać z powrotem, zastępując oryginał.
df2 <- readRDS("H:/Documents/tweet.df.rds") #read in permanent
tmp.df2 <- rbind(df2, tmp.df) #append new to existing
saveRDS(tmp.df2, file="H:/Documents/tweet.df.rds") #save it
rm(df2) #housecleaning
rm(tmp.df2) #housecleaning
Podejście to jest ryzykowne, bo gdy RDS jest otwarty dla odczytu/zapisu, kolejny proces chcąc dotknąć ten plik musi czekać. Gdy plik podstawowy staje się większy, ryzyko wzrasta.
Czy istnieje coś takiego jak appendRDS
(wiem dosłownie, że nie ma), że można osiągnąć to, co chcę - iteracyjne aktualizowanie pojedynczej ramki danych - zapisanej w pliku - która używa raczej zamiast do uzupełnienia?
Cóż, myślę, że robisz coś złego w pierwszej kolejności. Nadpisujesz swoje poprzednie dane, tym samym skutecznie usuwając poprzednie wersje. To powiedziawszy, dlaczego nie zapisać danych w formie tekstowej (CSV, np.) Za pomocą 'write.table', co pozwala na dołączanie do istniejących dokumentów? –
Naprawdę nadpisuję poprzednie dane kopią poprzednich danych, do ostatnich rekordów. Mam nadzieję, że mój drugi blok pokazuje, że proces czyta się w starym, dodaje nowe, nadpisuje stare ze starym + nowym. Teraz widzę opcję writeend.table. Trzymałem się z dala od formatu natywnego, ponieważ uznałem, że zwiększy to obciążenie przetwarzania. Ale mogę być w porządku, jeśli w tym kroku wymieniłem trochę nieefektywności na lepszą stabilność. –
Zastanawiam się, czy można użyć jakiejś magii z? Serializować, aby utworzyć funkcję dopisywania. –