Avro的系列化与通用类型问题(Avro serialization with generic ty

2019-09-29 04:47发布

我需要写Scala中的一个函数,返回AvroOutputStream serializated字节数组,但斯卡拉我不能让类的通用对象我传递的投入。 这里是我的Util类:

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()
    }
}

正如你可以看到,如果TOU测试此代码是AvroOutputStream无法识别的T舱,因此它不能为它生成的模式。 希望能帮到你! 谢谢

PS:有TypeTag和ClassTag已经尝试过,没有什么工作。

Answer 1:

您需要添加适当的implicits 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()
}


文章来源: Avro serialization with generic type issue