首页 > 解决方案 > 如何使用 PyArrow 序列化单个标量结构?

问题描述

我想使用 PyArrow 标量结构作为 RocksDB 的键。因此,我需要尽可能高效地将标量序列化为字节数组。

我会想象这样的事情:

import pyarrow as pa
key_type = pa.struct([
    ('chrom', pa.string()), 
    ('start', pa.int32()),
    ('end', pa.int32()),
])

value_type = pa.float32()

key1 = pa.scalar(("chr1", 13023, 13035), type=key_type)
value1 = pa.scalar(5.0, type=value_type)

key2 = pa.scalar(("chr4", 10211, 10315), type=key_type)
value2 = pa.scalar(2.0, type=value_type)

# How to implement to_bytes()?
db.set(key1.to_bytes(), value1.to_bytes())
db.set(key2.to_bytes(), value2.to_bytes())

# How to implement from_bytes?
value_test = db.get(key1.to_bytes())
value_test = from_bytes(value_test, type=value_type)
assert value_test == value1

正如评论中所写,我的问题是如何实施to_bytes()from_bytes(bytes_obj, type: pa.DataType)

请注意,我不想对架构进行编码,to_bytes()因为架构在所有键/值中都是相同的,并且我想节省内存。

标签: pythonnumpyserializationpyarrow

解决方案


推荐阅读