代码之家  ›  专栏  ›  技术社区  ›  Pasq

具有泛型类型问题的Avro序列化

  •  1
  • Pasq  · 技术社区  · 6 年前

    我需要在Scala中编写一个函数,返回一个用AvroOutputStream序列化的字节数组,但在Scala中,我无法获取传入输入的泛型对象的类。 下面是我的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()
        }
    }
    

    您可以看到,如果要测试这段代码,AvroOutputStream无法识别t类,因此无法为其生成模式。 希望你能帮忙!谢谢

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Yuval Itzchakov    6 年前

    您需要为添加适当的隐式 T SchemaFor ToRecord :

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