Авро сериализация с выпуском универсального типа
Мне нужно написать функцию в 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()
}