python - 如何从其字符串表示创建 ObjectID [pyarrow]
问题描述
我正在将一个 Python 对象保存到一个客户端的 Plasma 存储中,并希望将其加载到另一个客户端中。我的想法是将 ObjectID 作为 HTTP 请求的一部分传递。所以我有类似的东西:
import pyarrow.plasma as plasma
client = plasma.connect("/tmp/plasma")
payload = {"a": 1}
object_id = client.put(payload)
object_str = str(object_id)
print(object_str) # outputs: "ObjectID(8d8e54e5cb547962a6d16ff2869c2c3282ff6550)"
在我的目标客户中,我希望我能够执行以下操作:
import pyarrow.plasma as plasma
client = plasma.connect("/tmp/plasma")
data = client.get("8d8e54e5cb547962a6d16ff2869c2c3282ff6550")
但这不起作用,因为client.get
期望一个plasma.ObjectID
对象,而不是字符串标识符。但是后来我找不到plasma.ObjectID
使用此标识符创建对象的任何方法。它说我需要传入 20 个字节,但我不确定如何从这个 ID 中获取正确的 20 个字节。我尝试过类似plasma.ObjectID(b'8d8e54e5cb547962a6d16ff2869c2c3282ff6550')
无济于事的事情。
我发现唯一可行的方法是列出存储中的所有对象(如“client.list()”),然后在返回的字典中对 ObjectID 键的字符串表示进行字符串匹配。
如果我没有遵循预期的设计,我该如何:
- 将 python 对象保存到服务器 1 中的 Plasma
- 通过 HTTP 将引用从一台服务器传递到另一台服务器
- 在服务器 2 中访问此对象?
解决方案
找到了解决方案。打印的 ObjectID 是一个十六进制代码。您可以将其转换为这样的字节:
# source
import pyarrow.plasma as plasma
client = plasma.connect("/tmp/plasma")
payload = {"a": 1}
object_id = client.put(payload)
object_str = str(object_id)
print(object_str) # outputs: "ObjectID(8d8e54e5cb547962a6d16ff2869c2c3282ff6550)"
# client
id_str = "8d8e54e5cb547962a6d16ff2869c2c3282ff6550"
object = plasma.ObjectID(bytes.fromhex(id_str))
data = client.get(object)
推荐阅读
- angular - Jhipster Angular 应用程序和浏览器列表
- kubernetes - k3s - Metrics server doesn't work for worker nodes
- github - GitHub PR 中的 jenkins 作业状态未按正确顺序显示
- python - Json结构化数据导出CSV
- r - observeEvent 错误和使用 echarts4r 创建的绘图(闪亮的应用程序)
- asp.net-core - 统一 Blazor 服务器 UI 和(有效外部)API 之间的身份验证
- outlook - M365 Outlook 设置列视图设置
- elasticsearch - 在弹性搜索中查找具有距离范围的文档
- android - 横向模式下 ListView 内的 PageView
- tabs - 如何在一个 b-tab 中显示不同的 b-tab(bootstrap vue)