我正在使用Redis存储熊猫数据框。我正在使用PyArrow进行序列化,并想添加压缩。
我可以毫无问题地对数据帧进行序列化/反序列化。我还可以压缩序列化的数据帧。但是,我似乎无法解压缩它。
当我尝试解压缩时,我得到: ValueError:必须为lz4编解码器传递decompressed_size
因此,我添加了对象的大小并得到: 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.
答案 0 :(得分:1)
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)