compression - 如何使用 PyArrow 压缩/解压缩序列化的 Pandas 数据帧?
问题描述
我正在使用 Redis 存储 Pandas 数据框。我正在使用 PyArrow 进行序列化并想添加压缩。
我可以毫无问题地序列化/反序列化数据帧。我还可以压缩序列化的数据帧。但是,我似乎无法解压缩它。
当我尝试解压缩时,我得到: ValueError: Must pass decompressed_size for lz4 codec
因此,我添加了对象的大小并得到: ArrowIOError: Corrupt 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)
推荐阅读
- docker - docker:将文件从一个容器获取到另一个容器
- python - Shapely/Pyproj 转换引发 OverflowError - 确定 LineString 的长度
- php - 条纹 webhook 给出空白页面看不到页面
- haskell - 为什么没有推断出类型?
- database - ms访问表单添加条件记录
- c# - 如果存在则更新值或使用 C# linq 在 SQL 中插入
- angular - Angular 应用程序已停止运行,并将文件夹“node_modules”错误放置到“src”中
- python - 我正在尝试编写 FASTA 文件,但写入功能不起作用,即使我在其末尾添加 .close() ,有什么建议吗?
- python - NotFoundError:没有为与节点 {{node PyFunc}} 兼容的“CPU”设备注册的“PyFunc”OpKernel。挂号的:
- java - volatile 的 Java 内存模型保证