これは難しい例ですが、再現可能な例はありませんが、他の人がこれを扱っている経験があることを期待しています。saveRDSオブジェクトのサイズが膨らんでいます
私は、DBから大量のデータを取り出し、サイズを減らし、いくつかのパラメータをループして、一連のlmモデルオブジェクト、パラメータ値、およびその他の参照値を生成する関数を持っています。これは合計約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の保存サイズが小さくなります。
しかし、これには大きな欠点があります。
最初は試行錯誤であり、頻繁なクラッシュやリストオブジェクトを構築するのに数時間かかることがありますが、それは非常に長いデバッグサイクルです。
第2に、私の主な機能は、何百もの行が長くなり、将来の変更やデバッグがはるかに難しくなることを意味します。
私に質問する:
誰もこの問題が発生しましたか?
何が起こっているかに関する仮説はありますか?
論理的な試行錯誤の解決策は誰にも見つかりましたか?
ありがとうございました。
おそらくこれに関連します。http://r.789695.n4.nabble.com/Model-object-when-generated-in-a-function-saves-entire-environment-when-saved-td4723192.html – kennyB