Scala 有没有办法支持avro4s中的模式演化
有没有办法通过Scala 有没有办法支持avro4s中的模式演化,scala,schema,avro,avro4s,Scala,Schema,Avro,Avro4s,有没有办法通过AvroInputStream.binaryapi读取字节数组 以某种方式指定编写器版本 val in = new ByteArrayInputStream(bytesFromFile) val input = AvroInputStream.binary[newClass](in)// old ? val result = input.iterator.toSeq 换句话说,avro4s支持二进制记录的模式演化吗 avro4s支持二进制记录的模式演化吗 不支持。Avro通常支持
AvroInputStream.binary
api读取字节数组
以某种方式指定编写器版本
val in = new ByteArrayInputStream(bytesFromFile)
val input = AvroInputStream.binary[newClass](in)// old ?
val result = input.iterator.toSeq
换句话说,avro4s支持二进制记录的模式演化吗
avro4s支持二进制记录的模式演化吗
不支持。Avro通常支持模式演化。当您为其提供模式时,它可以与属性的名称及其类型相匹配。当没有模式时,它依赖于序列化和反序列化端的声明顺序。如果修改类,则会破坏兼容性。Avro DatumReader还有一个api,用于获取编写器架构
GenericData。createDatumReader(架构编写器,架构读取器)
,因此理论上您可以始终提供架构。。我正在avro4s中寻找类似的功能。。将inputStream(datumReader)指定给编写器的一种方法schema@NetanelRabinowitz没错,DatumReader
确实有这个API,但是avro4s
通过编译时宏提供了模式,因此对它进行了抽象。不幸的是,没有提供“较低级别”的API。此外,如果您的avro blob没有架构,那么无论您是否提供了一个DatumReader
,它都没有什么可匹配的。我想我应该打开一个功能请求,而不是..:)谢谢@NetanelRabinowitz甚至更好,一个pull请求:)。不客气。@NetanelRabinowitz我现在在打电话,明天再看。