- AVRO 基础知识
- AVRO - 首页
- AVRO - 概述
- AVRO - 序列化
- AVRO - 环境设置
- AVRO 模式和 API
- AVRO - 模式
- AVRO - 参考 API
- 通过生成类了解 AVRO
- 通过生成类进行序列化
- 通过生成类进行反序列化
- 使用解析器库进行 AVRO
- 使用解析器进行序列化
- 使用解析器进行反序列化
- AVRO 有用资源
- AVRO - 快速指南
- AVRO - 有用资源
- AVRO - 讨论
AVRO - 通过生成类进行反序列化
如前所述,用户可以通过生成与模式对应的类或使用解析器库将 Avro 模式读入程序。本章介绍如何通过生成类来读取模式以及使用 Avro 对数据进行反序列化。
通过生成类进行反序列化
已将序列化数据存储在文件 emp.avro 中。可以反序列化该数据并使用 Avro 对其进行读取。
请按照下面给出的步骤从文件中反序列化序列化数据。
步骤 1
使用 SpecificDatumReader 类创建 DatumReader 接口的对象。
DatumReader<emp>empDatumReader = new SpecificDatumReader<emp>(emp.class);
步骤 2
为 emp 类实例化 DataFileReader。该类从文件中读取序列化数据。它需要 Datumreader 对象和序列化数据所在的路径作为构造函数的参数。
DataFileReader<emp> dataFileReader = new DataFileReader(new File("/path/to/emp.avro"), empDatumReader);
步骤 3
使用 DataFileReader 的方法打印反序列化数据。
如果 Reader 中有任何元素,hasNext() 方法将返回一个布尔值。
DataFileReader 的 next() 方法返回 Reader 中的数据。
while(dataFileReader.hasNext()){ em=dataFileReader.next(em); System.out.println(em); }
示例 - 通过生成类进行反序列化
以下完整程序展示了如何使用 Avro 反序列化文件中的数据。
import java.io.File; import java.io.IOException; import org.apache.avro.file.DataFileReader; import org.apache.avro.io.DatumReader; import org.apache.avro.specific.SpecificDatumReader; public class Deserialize { public static void main(String args[]) throws IOException{ //DeSerializing the objects DatumReader<emp> empDatumReader = new SpecificDatumReader<emp>(emp.class); //Instantiating DataFileReader DataFileReader<emp> dataFileReader = new DataFileReader<emp>(new File("/home/Hadoop/Avro_Work/with_code_genfile/emp.avro"), empDatumReader); emp em=null; while(dataFileReader.hasNext()){ em=dataFileReader.next(em); System.out.println(em); } } }
浏览放置生成代码的目录。在本例中,位于 home/Hadoop/Avro_work/with_code_gen。
$ cd home/Hadoop/Avro_work/with_code_gen/
现在,复制并保存以上程序到名为 DeSerialize.java 的文件中。按照以下方法对其进行编译和执行 -
$ javac Deserialize.java $ java Deserialize
输出
{"name": "omar", "id": 1, "salary": 30000, "age": 21, "address": "Hyderabad"} {"name": "ram", "id": 2, "salary": 40000, "age": 30, "address": "Hyderabad"} {"name": "robbin", "id": 3, "salary": 35000, "age": 25, "address": "Hyderabad"}
广告