spark的序列化主要使用了hadoop的writable和java的Serializable。

说到底就是使用hadoop的writable替换了java的默认序列化实现方式。

class SerializableWritable[T <: Writable](@transient var t: T) extends Serializable {

  def value: T = t

  override def toString: String = t.toString

  private def writeObject(out: ObjectOutputStream): Unit = Utils.tryOrIOException {
out.defaultWriteObject()
new ObjectWritable(t).write(out)
} private def readObject(in: ObjectInputStream): Unit = Utils.tryOrIOException {
in.defaultReadObject()
val ow = new ObjectWritable()
ow.setConf(new Configuration())
ow.readFields(in)
t = ow.get().asInstanceOf[T]
}
}

这个有个让人疑惑的地方是使用@transient 表示该值不会被序列化,我做个一个测试是可以的,为什么呢,因为spark这里定制了java的序列化,使用hadoop的序列化方案,同时t是Writable类型没有实现Serializable接口不能被序列化。

object SerializableWritableTest extends App
{
println("start")
val name:Text=new Text("gaoxing");
val s=new SerializableWritable[Text](name);
val fout=new FileOutputStream("name.dat");
val out=new ObjectOutputStream(fout);
out.writeObject(s) val fin=new FileInputStream("name.dat");
val in=new ObjectInputStream(fin);
val n=in.readObject()
println(n.asInstanceOf[SerializableWritable[Text]].value.toString)
println("end")
}

  

最新文章

  1. AJXA!让体验更美好
  2. (二)Maven的安装与环境配置
  3. ubuntu12.04server下red5-1.0.0RC1的部署
  4. 因为此控件已在 web.config 中注册并且与该页位于同一个目录中
  5. 使用adb shell dumpsys检测Android的Activity任务栈
  6. 重构第5天:提升字段(Pull Up Field)
  7. SQLServer 执行计划
  8. URAL 2056 Scholarship 水题
  9. ScrollBox 响应鼠标滚轮和ComboBox禁止滚动
  10. 关于return和exit
  11. Fedora 17 修改GRUB启动菜单顺序
  12. .net中Web.config文件的基本原理及相关设置
  13. [置顶] 【Git入门之十】Rebase操作
  14. Lambda的使用与实战
  15. CentOS 下搭建Hudson
  16. iOS-自定义NavigationItem返回按钮【pop返回按钮】
  17. js-ES6学习笔记-Class(2)
  18. linux上源码编译安装mysql-5.6.28
  19. lua闭包与简易迭代器实现
  20. 科技发烧友之单反佳能700d中高端

热门文章

  1. Spring转账业务_注解配置事物控制
  2. P1230 智力大冲浪(洛谷)
  3. php中empty(), is_null(), isset()函数区别(转)
  4. docker 镜像自动升级脚本
  5. 布同:使用ghost备份或者还原的往事
  6. Azure SLB + httpd + ILB + HAProxy + Atlas + MySQL
  7. 在Mac系统下如何恢复SourceTree全局忽略的文件
  8. [转载]Linux 内核list_head 学习(一)
  9. 并发编程之五--ThreadLocal
  10. Oracle logminer 分析redo log(TOAD与PLSQL)