【问题标题】:If the avro schema is stored with the data, why does the java avro api need me to supply a schema file?如果 avro 模式与数据一起存储,为什么 java avro api 需要我提供模式文件?
【发布时间】:2019-06-08 10:21:49
【问题描述】:

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

我正在研究如何“反序列化”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 不能从文件本身中读取它吗?

【问题讨论】:

    标签: java avro


    【解决方案1】:

    既然已经有了获取json的工具,为什么还要写代码呢?

    java -jar avro-tools-1.8.2.jar tojson data.avro > output.json
    

    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

    【讨论】:

      猜你喜欢
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 2013-12-31
      • 2019-09-24
      • 2017-01-22
      • 1970-01-01
      • 2018-01-11
      相关资源
      最近更新 更多