[英]Spark dataset encoders: kryo() vs bean()
在 Spark 中处理数据集时,我们需要指定用于序列化和反序列化对象的编码器。 我们可以选择使用Encoders.bean(Class<T>)
或Encoders.kryo(Class<T>)
。
这些有什么不同,使用一种与另一种的性能影响是什么?
出于多种原因,始终建议使用 Kryo 序列化到 Java 序列化。 其中一些在下面。
Cache()
和Persist()
。 这在像Shuffling
这样的阶段非常有用。saveAsObjectFile
上RDD和objectFile
方法上SparkContext
仅支持Java序列。sparkConf.registerKryoClasses(Array( classOf[A], classOf[B], ...))
或sparkConf.set("spark.kryo.registrator", "MyKryoRegistrator")
。 这节省了大量空间并避免了不必要的元数据。 bean()
和javaSerialization()
之间的区别在于javaSerialization()
使用通用 java 序列化来序列化T
类型的对象。 此编码器将T
映射到单个字节数组(二进制)字段。 其中 bean 为T
类型的 Java Bean 创建了一个编码器。 它们都使用 Java 序列化,唯一的区别是它们如何将对象表示为字节。
从文档中引用
JavaSerialization 效率极低,只能作为最后的手段使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.