提问人:alexmoon 提问时间:11/16/2023 最后编辑:dtolnayalexmoon 更新时间:11/22/2023 访问量:32
在 scala 中,来自泛型的 Avro 序列化
in scala, Avro Serialization from generics
问:
我正在准备使用 scala 从 spark 中的泛型进行 avro 记录反序列化的实用程序。
implicit class enericRecordImprovements(rdd: RDD[GenericRecord]) {
def process[T : TypeTag : ClassTag]: RDD[T] = rdd.map(d => initCaseClassWithGenericRecord[T](d))
}
def initCaseClassWithGenericRecord[T](r: GenericRecord)(implicit mf: TypeTag[T], mf2: ClassTag[T]): T = {
val schema = AvroSchema[T]
val schemaFor: SchemaFor[T] = SchemaFor.apply(schema)
implicit val encoder: Encoder[T] = Encoder[T].withSchema(schemaFor)
implicit val decoder: Decoder[T] = Decoder[T].withSchema(schemaFor)
val format = RecordFormat[T]
format.from(r)
}
首先,我只使用 RecordFormat,但我在构建时遇到了错误,就像这样。
could not find implicit value for evidence parameter of type com.sksamuel.avro4s.Encoder[T]
one error found
因此,我定义了 Encoder、Decoder、SchemaFor 和 AvroSchema,如上所述,它们在隐式参数中使用。
然后发生此错误。
could not find implicit value for parameter schemaFor: com.sksamuel.avro4s.SchemaFor[T]
one error found
我认为,原因可能是泛型。 因此,我尝试通过ClassTag,TypeTag查找val schema = AvroSchema[T]的类型参数。但是我无法解决这个问题..
请提供任何使用泛型反序列化 Avro 记录工作的提示。谢谢。
scala 版本 : 2.12 AVRO4S:2.12_4.1.1
答: 暂无答案
评论
ClassTag
TypeTag
AvroEncoder