如何使用 PyArrow 压缩/解压缩序列化的 Pandas Dataframe?

How to compress / decompress a serialized Pandas Dataframe with PyArrow?

我正在使用 Redis 存储 Pandas 数据帧。我正在使用 PyArrow 进行序列化并希望添加压缩。

我可以 serialize/deserialize 数据帧没有问题。我还可以压缩序列化数据帧。但是,我似乎无法解压缩它。

当我尝试解压缩时,我得到:ValueError: Must pass decompressed_size for lz4 codec

因此,我添加了对象的大小并得到:ArrowIOError:损坏的 Lz4 压缩数据。

认为这可能是 Pandas 数据帧的问题,我尝试使用简单的文本字符串但得到了相同的结果。我认为这可能是 lz4 编解码器的问题,但 'gzip' 也会出现错误。非常感谢任何帮助。

import pandas
import pyarrow
import sys


df = pandas.DataFrame({'A':[1,2,3],'B':[4,5,6]})

ser = pyarrow.serialize(df).to_buffer()
comp = pyarrow.compress(ser,asbytes=True)

dec = pyarrow.decompress(comp)  
# Gives ValueError: Must pass decompressed_size for lz4 codec

siz = sys.getsizeof(ser) #siz = 56
dec = pyarrow.decompress(comp,decompressed_size = siz) 
#Gives ArrowIOError: Corrupt Lz4 compressed data.

sys.getsizeof 提供了错误的尺寸。以下代码往返:

import pandas
import pyarrow
import sys


df = pandas.DataFrame({'A':[1,2,3],'B':[4,5,6]})

ser = pyarrow.serialize(df).to_buffer()
comp = pyarrow.compress(ser,asbytes=True)
siz = len(ser) #siz = 3912
dec = pyarrow.decompress(comp,decompressed_size = siz)
pyarrow.deserialize(dec)