python - Pandas msgpack vs pickle
(1)
Pickle es mejor para lo siguiente:
- Datos numéricos o cualquier cosa que utilice el protocolo de búfer (arrays de números) (aunque solo si usa un
protocol=
algo recienteprotocol=
) - Objetos específicos de Python como clases, funciones, etc. (aunque aquí deberías ver
cloudpickle
)
MsgPack es mejor para lo siguiente:
- Interoperación entre idiomas. Es una alternativa a JSON con algunas mejoras.
- Rendimiento en datos de texto y objetos de Python. Es un factor decente más rápido que Pickle en esto, bajo cualquier configuración.
Como @Jeff señaló anteriormente, este blogpost puede ser de interés
Se supone que msgpack
en Pandas es un reemplazo para pickle
.
Por los documentos de Pandas en msgpack :
Este es un formato binario portátil ligero, similar a JSON binario, que es altamente eficiente en espacio, y proporciona un buen rendimiento tanto en la escritura (serialización) como en la lectura (deserialización).
Sin embargo, me parece que su rendimiento no parece apilarse contra los encurtidos.
df = pd.DataFrame(np.random.randn(10000, 100))
>>> %timeit df.to_pickle(''test.p'')
10 loops, best of 3: 22.4 ms per loop
>>> %timeit df.to_msgpack(''test.msg'')
10 loops, best of 3: 36.4 ms per loop
>>> %timeit pd.read_pickle(''test.p'')
100 loops, best of 3: 10.5 ms per loop
>>> %timeit pd.read_msgpack(''test.msg'')
10 loops, best of 3: 24.6 ms per loop
Pregunta: Aparte de los posibles problemas de seguridad con pickle, ¿cuáles son los beneficios de msgpack sobre pickle? ¿Pickle sigue siendo el método preferido para serializar datos, o existen actualmente mejores alternativas?