序列化
解决Driver端创建的对象 在Execute端传输问题
方式一:使用Java Serializable接口【Spark默认】
优点:
- 简单,不需要额外的工作
- java自带,方便
缺点:
- 序列化速度慢
- 序列化后size比较大
hadoop中采取了自定义序列化 …Writable
方式二: Kyro 第三方序列化【Spark支持】
优点:序列化后的size 大概是Serializable 十分之一
val conf = new SparkConf().setAppName("Demo").setMaster("local[2]")
// 设置序列化器为Kryo【此步可省略,在源码中已经实现】
.set("spark.serializer",classOf[Kryo].getName)
// 指定要使用Kryo序列化的类
.registerKryoClasses(Array(classOf[Searcher]))
// 需要序列化的类要继承Serializable
class Searcher() extends Serializable {
}
val sc = new SparkContext(conf)
补充
样例类默认实现了Serializable 接口