我在R中有许多大型数据框,计划使用redis进行存储。我对redis完全不熟悉,但今天一直在阅读相关知识,并使用了R软件包rredis
。
我已经尝试使用redisSet()
和redisGet()
函数保存和检索小数据框,但是当我尝试使用redisSet('bigDF', bigDF)
保存较大的数据框(最大的一个有430万行,以.RData文件格式保存时大小为365MB)时,出现以下错误信息:
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
谢谢