2016-09-30 42 views
1

由於avro中的數據文件嵌入了模式,因此讀者不想單獨保存.avsc文件來指定模式。我正在尋找一個以這種方式工作的java示例,但我找不到它。有人請幫助我獲得相同的代碼示例。從數據文件解析Avro模式

Schema schema = new Schema.Parser().parse(new File("./AvroSchema/emp.avsc")); 

DatumReader<GenericRecord> datumReader = new GenericDatumReader<GenericRecord>(schema); 
DataFileReader<GenericRecord> dataFileReader = new DataFileReader<GenericRecord>(new File("./AvroFileStore/empData.txt"), datumReader); 

GenericRecord emp = null; 
while (dataFileReader.hasNext()) { 
    emp = dataFileReader.next(emp); 
    System.out.println(emp); 
} 

在這個例子中,我們通過使用datumReader單獨設置阿夫羅架構DataFileReader

回答

1

GenericDatumReader也有一個不帶任何參數的構造函數。只是不要傳遞任何模式。當然,這隻適用於數據文件,而不適用於沒有嵌入架構的數據流。

順便說一句,如果你已經構造dataFileReader你可以調用它的getSchema()方法來獲取模式,如果有需要的話。

來源:Hadoop: The Definitive Guide by Tom White

+0

非常感謝。它運行良好。 – Jobs