gpt4 book ai didi

scala - 如何使用 Avro 序列化 Scala 案例类?

转载 作者:行者123 更新时间:2023-12-05 08:56:45 24 4
gpt4 key购买 nike

跟进这个问题:Avro serialisation cast error in Scala

使用 Avro 序列化 Scala case 类的最佳方法是什么?

这是我现在正在做的:

 def serializeSubmapRecord(record: MyRecord): Array[Byte] = {
val out = new ByteArrayOutputStream()
val encoder = EncoderFactory.get.binaryEncoder(out, null)
val writer = new GenericDatumWriter[GenericRecord](avro_schema)
val r = new GenericData.Record(avro_schema);
r.put("my_number", 1);
writer.write(r, encoder)
encoder.flush
out.close
out.toByteArray
}

Avro 模式在哪里

{"namespace": "",
"type": "record",
"name": "MyRecord",
"fields": [
{"name": "my_number", "type": "int"}
]
}

但是我想要这样的东西:

case class MyRecord(my_number: Int)
val record = new MyRecord(1)

def serializeSubmapRecord(record: MyRecord): Array[Byte] = {
val out = new ByteArrayOutputStream()
val encoder = EncoderFactory.get.binaryEncoder(out, null)
val writer = new GenericDatumWriter[MyRecord](avro_schema)
writer.write(record, encoder)
encoder.flush
out.close
out.toByteArray

最后一段代码给出了链接问题的异常(exception)情况。我做错了什么?

最佳答案

另一种选择是使用 Scala 库,avro4s .免责声明:这是我的项目。

因此您可以创建这样的模式:

case class MyRecord(my_number: Int)

val schema = AvroSchema[MyRecord]

val record = new MyRecord(1)

或者像您的问题一样写出一个字节数组:

val baos = new ByteArrayOutputStream()
val os = AvroOutputStream.data[MyRecord](baos)
os.write(record)
os.close()

关于scala - 如何使用 Avro 序列化 Scala 案例类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38955536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com