写点什么

rdd 序列化

发布于: 2020 年 07 月 15 日



1.闭包检查

         从计算角度,算子以外的代码都在Driver端执行吗,算子代码在executor执行,在Scala中经常会用到在算子内用到算子外的数据,这样就形成了闭包效果。如果使用算子外的数据无法序列化,就意味着无法传值给executor执行,会发生错误。所以需要在执行任务计算前,检测闭包内的对象是否可以进行序列化,这个操作称之为闭包检测。

Scala2.12版本后闭包编译方式发生了改变。




2.序列化方法和属性

        当算子中用的是类直接传递过来的参数,要保证类已经序列化,如果算子使用的是类中重新复制的常量,如果常量本身是字符串类型,字符串本身具备了序列化,所以该常量已经序列化不会出错


3.序列化的框架

        如果使用的是Java的序列化框架和spark新增的序列化框架kryo,java的序列化比较重,kyro序列化比较轻,当rdd在shuffle数据的时候,简单数据类型,数组和字符串类型已经在spark内部使用kryo来序列化。

如果某类需要序列化在提交spark之前需要在配置中注册需要使用kryo序列化的自定义类





transient关键字:

如果在一个类中某个变量不需要保存在序列化中,可以使用transient来声明, 用transient关键字标记的成员变量不参与序列化过程。



用户头像

还未添加个人签名 2020.07.15 加入

还未添加个人简介

评论

发布
暂无评论
rdd序列化