gpt4 book ai didi

java - 为什么 avro 无法从 .avro 文件中获取架构?

转载 作者:行者123 更新时间:2023-12-02 09:29:18 32 4
gpt4 key购买 nike

这是来自教程点的解串器。

public class Deserialize {
public static void main(String args[]) throws Exception{

//Instantiating the Schema.Parser class.
Schema schema = new Schema.Parser().parse(new File("/home/Hadoop/Avro/schema/emp.avsc"));
DatumReader<GenericRecord> datumReader = new GenericDatumReader<GenericRecord>(schema);
DataFileReader<GenericRecord> dataFileReader = new DataFileReader<GenericRecord>(new File("/home/Hadoop/Avro_Work/without_code_gen/mydata.txt"), datumReader);
GenericRecord emp = null;

while (dataFileReader.hasNext()) {
emp = dataFileReader.next(emp);
System.out.println(emp);
}
System.out.println("hello");
}
}

我的问题是:如果 .avro 文件中已经存在架构,为什么我还必须传递该架构?我发现必须提供架构才能解析文件非常不方便。

最佳答案

Avro 需要两种模式进行解析 - 读取器模式和写入器模式。

写入器架构包含在文件中。

可以从文件中解析架构

String filepath = ...;
DataFileReader<Void> reader = new DataFileReader<>(Util.openSeekableFromFS(filepath),
new GenericDatumReader<>());
System.out.println(reader.getSchema().toString(true));

这就是java -jar avro-tools.jar getschema作品

您可能需要 Util.openSeekableFromFS方法,因为它似乎是包私有(private)的

关于java - 为什么 avro 无法从 .avro 文件中获取架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58113557/

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