具有通用类型问题的 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
添加适当的隐式,即 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()
}
我需要在 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
添加适当的隐式,即 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()
}