Rには、redisを使用して保存する予定の大きなデータフレームが多数あります。私は redis にまったく慣れていませんが、今日それについて読んでいて、R パッケージを使用していますrredis
。
redisSet()
私は小さなデータをいじり、関数と関数を使用して小さなデータフレームを保存および取得しましたredisGet()
。ただし、コードを使用してより大きなデータフレーム (.RData ファイルとして保存した場合、最大のものは 430 万行で 365MB) を保存するとredisSet('bigDF', bigDF)
、次のエラー メッセージが表示されます。
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
おそらく、データフレームが大きすぎて保存できないためです。redisSet がデータフレームを文字列として書き込むことは知っていますが、これはおそらく大きなデータフレームで行う最善の方法ではありません。これを行う最良の方法を知っている人はいますか?
編集:非常に大きなダミーデータフレームを作成する際にエラーを再現しました:
bigDF <- data.frame(
'lots' = rep('lots',40000000),
'of' = rep('of',40000000),
'data' = rep('data',40000000),
'here'=rep('here',40000000)
)
実行redisSet('bigDF',bigDF)
するとエラーが発生します:
Error in .redisError("Invalid agrument") : Invalid agrument
初めて、その後すぐにもう一度実行すると、エラーが発生します
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
ありがとう