- 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"}
廣告