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

时间:2019-10-17 21:06:36

标签: compression pyarrow

我正在使用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.

1 个答案:

答案 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)