Encoder
用于serialize/deserialize
到Spark SQL内部Row的Java对象。所以,我认为这是SerDe框架,
但是,我还看到了另一个名为CatalystSerde
的对象。我想问一下Encoder and CatalystSerde
之间的关系。以下是CatalystSerde
object CatalystSerde {
def deserialize[T : Encoder](child: LogicalPlan): DeserializeToObject = {
val deserializer = UnresolvedDeserializer(encoderFor[T].deserializer)
DeserializeToObject(deserializer, generateObjAttr[T], child)
}
def serialize[T : Encoder](child: LogicalPlan): SerializeFromObject = {
SerializeFromObject(encoderFor[T].namedExpressions, child)
}
def generateObjAttr[T : Encoder]: Attribute = {
val enc = encoderFor[T]
val dataType = enc.deserializer.dataType
val nullable = !enc.clsTag.runtimeClass.isPrimitive
AttributeReference("obj", dataType, nullable)()
}
}
答案 0 :(得分:1)
Spark使用编码器进行序列化,在此我听说催化优化器不是serde,但它可以优化spark中的序列化。
在考虑编码器和催化剂优化器时,以下几点很重要,