python - 用 Pickle5 代替 PyArrow 的序列化/反序列化?
问题描述
似乎 PyArrow 已弃用pa.serialize()
andpa.deserialize()
方法并建议使用其他选项,例如 Pickle5。
使用 Pickle5(协议 5)似乎与 PyArrow 不推荐使用的序列化方法具有相同的性能。和 有任何适当的替代品pa.serialize()
吗pa.deserialize()
?
这是一个简化的代码,比较了 PyArrow 和 Pickle 在序列化/反序列化时的区别:
import time
import numpy as np
import pickle5
import pyarrow as pa
class Person:
def __init__(self, Thumbnail: np.ndarray = None):
if Thumbnail is not None:
self.Thumbnail: np.ndarray = Thumbnail
else:
self.Thumbnail: np.ndarray = np.random.rand(256, 256, 3)
def serialize_Person(person):
return {'Thumbnail': person.Thumbnail}
def deserialize_Person(person):
return Person(person['Thumbnail'])
context = pa.SerializationContext()
context.register_type(Person, 'Person', custom_serializer=serialize_Person, custom_deserializer=deserialize_Person)
PERSONS = [Person() for i in range(100)]
"""
PyArrow
"""
t1 = time.time()
persons_serialized = pa.serialize(PERSONS, context=context).to_buffer()
persons_deserialized = pa.deserialize(persons_serialized, context=context)
t2 = time.time()
print(f'PyArrow Time => {t2 - t1}')
"""
Pickle
"""
t1 = time.time()
persons_pickled = pickle5.dumps(PERSONS, protocol=5)
persons_depickled = pickle5.loads(persons_pickled)
t2 = time.time()
print(f'Pickle Time => {t2 - t1}')
我系统上的输出是:
PyArrow Time => 0.04499983787536621
Pickle Time => 0.2220008373260498
解决方案
推荐阅读
- javascript - 为什么 array.prototype.slice() 在子类数组上这么慢?
- python - 我该如何解决,ValueError:一个系列的真值是模棱两可的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
- javascript - 如何将用户名从 React Native 应用程序发送到 Dialogflow 以供机器人在响应中使用
- powershell - 与邮递员不同,当用于与 Microsoft Graph API 交互时,powershell 脚本性能会变慢
- hadoop - hive UDF - 将 StringObjectInspector 转换为 String
- replace - 如何正确替换输出?
- r - r blogdown: project content disappears
- python - 为什么转换后的 numpy 数组没有显示在 Spyder 4 的变量 exloporer 中?
- snowflake-cloud-data-platform - 内置函数的连接问题
- android - OneSignal Notification Sound not playing on app open