Pandas msgpack vs pickle
msgpack
в Pandas предполагается заменить на pickle
.
В Pandas docs на msgpack:
Это легкий переносимый двоичный формат, похожий на двоичный JSON, который обладает высокой эффективностью в пространстве и обеспечивает хорошую производительность как на запись (сериализация) и чтение (десериализация).
Я считаю, однако, что его производительность не складывается против рассола.
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
Вопрос: Пострадавшие от потенциальных проблем безопасности с рассолом, каковы преимущества использования msgpack над рассолом? Является ли рассол еще предпочтительным методом сериализации данных или существуют лучшие альтернативы в настоящее время?
Ответы
Ответ 1
Pickle лучше для следующего:
- Числовые данные или все, что использует буферный протокол (массивы numpy) (хотя, только если вы используете несколько недавних
protocol=
)
- Конкретные объекты Python, такие как классы, функции и т.д. (хотя здесь вы должны посмотреть
cloudpickle
)
MsgPack лучше для следующего:
- Перекрестное взаимодействие между языками. Это альтернатива JSON с некоторыми улучшениями.
- Производительность по текстовым данным и объектам Python. Это достойный фактор быстрее, чем Pickle при этом при любых настройках.
Как отметил @Jeff этот blogpost может представлять интерес