이것은 재현 가능한 예제를 제공 할 수 없기 때문에 까다로운 내용이지만 다른 사람들이이 문제를 처리해줬으면 좋겠다.saveRDS 객체의 크기를 늘림
본질적으로 DB에서 많은 양의 데이터를 가져 와서 클리닝하고 크기를 줄이고 일부 매개 변수를 반복하여 일련의 모델 개체, 매개 변수 값 및 기타 참조 값을 생성하는 기능이 있습니다. 이것은 약 10MB의 합계를 갖는 복잡한리스트 구조로 컴파일됩니다.
AWS s3에 RDS 파일로 저장되어 프로덕션 환경에서 검색되어 예상치를 작성합니다.
db.connection <- db.connection.object
build_model_list <- function(db.connection) {
clean_and_build_models <- function(db.connection, other.parameters) {
get_db_data <- function(db.connection, some.parameters) {# Retrieve db data} ## Externally defined
db.data <- get_db_data()
build_models <- function(db.data, some.parameters) ## Externally defined
clean_data <- function(db.data, some.parameters) {# Cleans and filters data based on parameters} ## Externally defined
clean.data <- clean_data()
lm_model <- function(clean.data) {# Builds lm model based on clean.data} ## Externally defined
lm.model <- lm_model()
return(list(lm.model, other.parameters))} ## Externally defined
looped.model.object <- llply(some.parameters, clean_and_build_models)
return(looped.model.object)}
model.list <- build_model_list()
saveRDS(model.list, "~/a_place/model_list.RDS")
내가 갖는 문제는 메모리에 10MB의입니다 'model.list'객체가 나는 RDS으로 로컬에 저장할 때 많은 GB를로 팽창 또는 AWS의 S3에 업로드 할 것입니다.
이 함수는 매우 많은 양의 데이터 (5 백만 행)를 처리하지만 출력에 사용되는 데이터는 수백 행보다 크지 않습니다.
Stack Exchange에서 제한된 정보를 읽었을 때 주 기능 (예 : clean_data 및 lm_model) 내부에서 외부에서 정의 된 일부 기능 (패키지의 일부로)을 이동하면 RDS 저장 크기가 줄어든다는 것을 알았습니다.
그러나 이것은 몇 가지 큰 단점이 있습니다.
첫째, 시행 착오이며 명확한 논리적 순서를 따르지 않으며 자주 충돌이 발생하고 목록 개체를 작성하는 데 몇 시간이 걸리며 매우 긴 디버깅주기입니다.
둘째로, 내 주요 기능이 앞으로 수천 줄의 길이가되어 향후 변경 및 디버깅이 훨씬 까다로울 수 있음을 의미합니다.
당신에게 내 질문은 :
사람이 이전에이 문제가 발생 했습니까?
무엇이 원인인지에 대한 가설은 무엇입니까?
논리적이고 시행 착오가없는 해결책을 찾은 사람이 있습니까?
도움 주셔서 감사합니다.
아마도이 http://r.789695.n4.nabble.com/Model-object-when-generated-in-a-function-saves-entire-environment-when-saved-td4723192.html과 관련이 있습니다. – kennyB