- 已关闭**。此问题需要超过focused。当前不接受答案。
- 想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。
昨天关门了。
社区昨天讨论了是否重新讨论此问题,并将其关闭:
原始关闭原因未解决
Improve this question
我需要在R中反序列化一个Redis对象,这个对象是用Python的pickle模块序列化的。准确地说,我可以用pickle序列化一个panda Dataframe ,但不知道如何在R中反序列化它。
我在R中使用redux来连接Redis服务器,而在Python中使用redis-py和pickle。
1条答案
按热度按时间41zrol4v1#
根据你的描述,你存储了一个Python序列化的对象,并要求Redis为你反序列化它,它不能这样做。
我已经通过RcppRedis(早于
redux
)与Redis进行了大量的跨语言数据交换,我喜欢的一种可能性是依靠msgpack进行编码(而不是像您这样使用pickle
),然后可以检索R的msgpack编码的二进制blob并对其进行解码。否则,您可以从更简单的开始,只存储字符串(或JSON),以便在进行更高级/性能更高的使用之前建立基线。我最初的设置使用C++代码编写二进制向量,您可以很容易地在R / Rcpp端拉取这些向量。
RcppRedis
包(如果内存服务是第一个连接到CRAN的Redis)使用Redis(主要来自R)时,我用kept a few helper scripts来测试/演示这种“中立的中间人”的能力。一个 * 可以 * 交替阅读R、Python(通过合适的包)、Shell(通过redis-cli
)、C/C++(通过hiredis
)......并且这样做对于int
、double
、string
,这些的组合等等是一个很好的手指练习。然后你可以在这个基础上构建任何一种 * 中立 * 的序列化格式,我的钱仍然花在MsgPack上,因为它同时具有高性能(二进制)、本机代码(编译后,速度快),而且不需要复杂的框架(ProtocolBuffers、Avro、FlatPack...)