Spark Core快速入门系列(6) | Spark序列化

spark的序列化

进行 Spark 进行编程的时候, 初始化工作是在 driver端完成的, 而实际的运行程序是在executor端进行的. 所以就涉及到了进程间的通讯, 数据是需要序列化的.
在这里插入图片描述
发现Task not serializable,那么怎么回事呢?
接下来有两种方法
第一种方法:可以把属性的值存入到一个局部变量,然后传递局部变量
在这里插入图片描述
第二种方法:继承serializable接口
在这里插入图片描述

关于序列化的原理

在这里插入图片描述

Kyro序列化(建议使用)

Java 的序列化比较重, 能够序列化任何的类. 比较灵活,但是相当的慢, 并且序列化后对象的体积也比较大.
Spark 出于性能的考虑, 支持另外一种序列化机制: kryo (2.0开始支持). kryo 比较快和简洁.(速度是Serializable的10倍). 想获取更好的性能应该使用 kryo 来序列化.
从2.0开始, Spark 内部已经在使用 kryo 序列化机制: 当 RDD 在 Shuffle数据的时候, 简单数据类型, 简单数据类型的数组和字符串类型已经在使用 kryo 来序列化.
有一点需要注意的是: 即使使用 kryo 序列化, 也要继承 Serializable 接口.
如果使用case就不用写继承Serializable,因为case自带序列化
在这里插入图片描述

那我就来证实一下为啥不用写那一行
在这里插入图片描述
帮你配了!
在这里插入图片描述

总结

序列化:
   1.java自带的序列化
        只需要实现java的一个接口:Serializable
     好处:
        1.及其简单,不要做任何额外的工作
        2.java自带,用起来方便
     坏处
        太重
        1.序列化速度慢
        2.序列化之后的size比较大
        spark默认是使用的这种序列化

    2.hadoop没有使用java的序列化
        hadoop自定义序列化机制:...Writable

    3 支持另外一种序列化
        Kyro
        不是spark自定义写的,而且是一个第三方写的

猜你喜欢

转载自blog.csdn.net/qq_46548855/article/details/108108916