Как сжать / распаковать сериализованный DataPrame Pandas с PyArrow? - PullRequest
1 голос
/ 18 октября 2019

Я использую Redis для хранения данных Pandas. Я использую PyArrow для сериализации и хотел бы добавить сжатие.

Я могу сериализовать / десериализовать кадры данных без проблем. Я также могу сжать сериализованный кадр данных. Тем не менее, я не могу распаковать его.

Когда я пытаюсь распаковать, я получаю: ValueError: Должен передать decompressed_size для кодека lz4

Итак, я добавляю размер объекта и получаю: 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 Ответ

1 голос
/ 18 октября 2019

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)
...