Spark中Java序列化和Kryo序列化结果比较

序列化:Java序列化 Kryo序列化
官网:http://spark.apache.org/docs/latest/tuning.html

如果Kryo序列化的对象比较大,需要添加一个参数spark.kryoserializer.buffer(默认64k)(有点小需要调大一点)
spark.kryoserializer.buffer.max(默认64m)(需要大于对象尝试序列化的数据的大小,并且小于2048m)(一般2047m??)

如果没有注册你的自定义类,kryo也可以工作,但它必须存储每个对象的完整类名,很浪费性能

代码打包成jar运行后(带有sc.stop()),把序列化给关掉了,在18080端口(history记录)看不到,只好命令行运行(4040的Storage查看)
//部分代码
import scala.collection.mutable.ArrayBuffer
case class Person(name:String, age:Int, gender:String, address:String)
val persons = new ArrayBuffer[Person]()
for(i <-1 to 1000000) {
  persons += (Person("name"+i, 10+i, "male", "beijing"))
}
val rdd = sc.parallelize(persons)
rdd.persist(StorageLevel.MEMORY_ONLY)
rdd.count()

rdd.unpersist()
//注册代码(命令行注册不上去,又换成打包jar了,使用了Thread.sleep(1000000),方便查看)
conf.set("spark.serializer","org.apache.spark.serializer.KryoSerializer")
conf.registerKryoClasses(Array(classOf[Person]))

结果:

Java序列化:
MEMORY_ONLY: 95.3 MB
MEMORY_ONLY_SER: 39.8 MB
------------------------------
Kryo序列化:(命令行启动可以加--conf spark.serializer=org.apache.spark.serializer.KryoSerializer)
MEMORY_ONLY: 95.3 MB
MEMORY_ONLY_SER: 119.1 MB(没有注册指定类)
MEMORY_ONLY_SER: 27.5 MB(注册指定类)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值