具有通用类型问题的 Avro 序列化

Avro serialization with generic type issue

我需要在 Scala 中编写一个函数,returns 一个用 AvroOutputStream 序列化的字节数组,但在 Scala 中我无法获得我传入的通用对象的 class输入。 这是我的工具 class:

class AvroUtils {

    def createByteArray[T](obj: T): Array[Byte] = {
        val byteArrayStream = new ByteArrayOutputStream()
        val output = AvroOutputStream.binary[T](byteArrayStream)
        output.write(obj)
        output.close()
        byteArrayStream.toByteArray()
    }
}

如您所见,测试此代码是否是因为 AvroOutputStream 无法识别 T class,因此它无法为其生成模式。 希望你能帮忙!谢谢

PS: 已经尝试使用 TypeTag 和 ClassTag,但没有任何效果。

您需要为 T 添加适当的隐式,即 SchemaForToRecord:

def createByteArray[T : SchemaFor : ToRecord](obj: T): Array[Byte] = {
  val byteArrayStream = new ByteArrayOutputStream()
  val output = AvroOutputStream.binary[T](byteArrayStream)
  output.write(obj)
  output.close()
  byteArrayStream.toByteArray()
}