spark序列化

官方文档:https://spark.apache.org/docs/latest/tuning.html

序列化在分布式应用的性能中扮演着重要的角色。格式化对象缓慢,或者消耗大量的字节格式化,会大大降低计算性能。通常这是在spark应用中第一件需要优化的事情。Spark的目标是在便利与性能中取得平衡,所以提供2种序列化的选择。

Java serialization

在默认情况下,Spark会使用Java的ObjectOutputStream框架对对象进行序列化,并且可以与任何实现java.io.Serializable的类一起工作。您还可以通过扩展java.io.Externalizable来更紧密地控制序列化的性能。Java序列化是灵活的,但通常相当慢,并且会导致许多类的大型序列化格式。

Kryo serialization

Spark还可以使用Kryo库(版本4)来更快地序列化对象。Kryo比Java串行化(通常多达10倍)要快得多,也更紧凑,但是不支持所有可串行化类型,并且要求您提前注册您将在程序中使用的类,以获得最佳性能。

您可以通过使用SparkConf初始化作业并调用conf.set(“ spark.serializer”,“ org.apache.spark.serializer.KryoSerializer”)来切换为使用Kryo。

要向Kryo注册您自己的自定义类,请使用registerKryoClasses方法

val conf = new SparkConf().setMaster(...).setAppName(...)
conf.registerKryoClasses(Array(classOf[MyClass1], classOf[MyClass2]))
val sc = new SparkContext(conf)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值