Авро сериализация с выпуском универсального типа

Мне нужно написать функцию в Scala, которая возвращает массив байтов, сериализованный с AvroOutputStream, но в scala я не могу получить класс универсального объекта, который я передаю во входные данные. Вот мой класс утилит:

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 ответ

Решение

Вы должны добавить соответствующие последствия для 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()
}
Другие вопросы по тегам