如何使用 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)
我正在使用 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)