Python-序列化和反序列化

在Spark中使用广播变量时,选择合适的序列化格式是非常重要的。这里重点讲的是Python中的序列化。

1.序列化和反序列化

序列化就是把数据变成可存储或可传输的过程的,只有序列化后的数据才可以写入到磁盘或者通过网络传输到Spark集群的其他节点上。反序列化则相反,反序列就是把序列化的变量重新转到内存里。

2.Python包的使用

2.1 pickle包

pickle包主要使用的就是4个函数。这个只适用于在python环境中传输。

pickle.dump() 将任意对象转化成bytes,并写入文件中。
pickle.dumps() 将任意对象转化成bytes.
pickle.loads() 从bytes中反序列化出对象
pickle.load() 从文件中反序列出对象

 pickle.load()和pickle.dump()用法:

Python-序列化和反序列化_第1张图片

pickle.loads()和pickle.dumps()用法:

Python-序列化和反序列化_第2张图片

但是这里要注意,不要把使用pickle.dumps()方法得到的二进制字符串直接存放到文件中,容易导致UnpicklingError错误(因为文件对象f可能会将二进制串中的特殊字符当做换行符处理)。比如:

Python-序列化和反序列化_第3张图片

 另外,还有一个与pickle功能相似的包,即cPickle,这个包底层使用c语言写的,所以运行速度要比pickle包快。

你可能感兴趣的:(Python,序列化)