如果avro模式与数据一起存储,为什么java avro api需要我提供模式文件?

时间:2019-06-06 20:23:52

标签: java avro

在某些情况下,Microsoft Azure决定以avro格式转储数据。从我的角度来看,有问题的数据只是json记录。因此,我只想将我的json数据从avro文件中退回。

我正在研究如何“反序列化” avro数据,以及此处的示例:

https://avro.apache.org/docs/1.8.1/gettingstartedjava.html

提出索赔:

Data in Avro is always stored with its corresponding schema, meaning we can always read a serialized item regardless of whether we know the schema ahead of time.

不幸的是,这些示例确实需要提前了解架构:

DatumReader<GenericRecord> datumReader = new GenericDatumReader<GenericRecord>(schema);
DataFileReader<GenericRecord> dataFileReader = new DataFileReader<GenericRecord>(file, datumReader);

我必须丢失一些东西,我只是想要我的数据(文本/ json)格式,而不是avro。有什么办法可以在不了解模式的情况下进行的吗? avro不能从文件本身中读取吗?

1 个答案:

答案 0 :(得分:0)

当已经有获取json的工具时,为什么要编写代码?

topicExists

http://central.maven.org/maven2/org/apache/avro/avro-tools/1.8.2/avro-tools-1.8.2.jar

否则,您的文件具有架构,您必须在读取文件内容之前首先将其解压缩,这正是上述工具的源代码所做的

https://github.com/apache/avro/blob/master/lang/java/tools/src/main/java/org/apache/avro/tool/DataFileReadTool.java#L77