Avro 简明教程
AVRO - Deserialization Using Parsers
如前所述,可以通过生成与模式对应的类或使用解析器库将 Avro 模式读入程序。在 Avro 中,数据总是与它对应的模式存储在一起。因此,我们始终可以在不生成代码的情况下读取一个序列化项。
本章描述了如何使用 Avro 读取模式 using parsers library 和 Deserializing 数据。
Deserialization Using Parsers Library
序列化数据存储在文件 mydata.txt 中。你可以使用 Avro 反序列化和读取它。
按照以下步骤从文件中序列化序列化数据。
Step 1
首先,从文件中读取模式。为此,请使用 Schema.Parser 类。此类提供以不同格式解析模式的方法。
通过传递存储模式的文件路径实例化 Schema.Parser 类。
Schema schema = new Schema.Parser().parse(new File("/path/to/emp.avsc"));
Step 2
使用 SpecificDatumReader 类创建一个 DatumReader 接口对象。
DatumReader<emp>empDatumReader = new SpecificDatumReader<emp>(emp.class);
Example – Deserialization Using Parsers Library
以下完整程序展示了如何使用解析器库序列化序列化数据:
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");
}
}
浏览到生成代码所在目录。在本例中,它在 home/Hadoop/Avro_work/without_code_gen 。
$ cd home/Hadoop/Avro_work/without_code_gen/
现在将上述程序复制并保存到名为 DeSerialize.java 的文件中。按照以下步骤进行编译和执行 -
$ javac Deserialize.java
$ java Deserialize