2016-09-30 3 views
1

Da die Datendatei in avro mit dem Schema dafür eingebettet ist, möchte der Leser nicht getrennte .AVSC-Datei, um das Schema anzugeben. Ich suchte nach einem Java-Beispiel, das auf diese Weise funktioniert, das konnte ich nicht finden. Jemand, bitte helfen Sie mir, ein Codebeispiel für das gleiche zu bekommen.Avro-Schema Parsing von Datendatei

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); 
} 

In diesem Beispiel verwenden wir das Avro-Schema separat DataFileReader bieten durch datumReader verwenden.

Antwort

1

GenericDatumReader hat auch einen Konstruktor, der keine Parameter akzeptiert. Übergeben Sie einfach kein Schema. Dies funktioniert natürlich nur mit Datendateien und nicht mit Datenströmen, in denen das Schema nicht eingebettet ist.

BTW Sobald Sie dataFileReader konstruiert haben, können Sie seine getSchema() Methode aufrufen, um das Schema zu erhalten, wenn es jemals benötigt wird.

Quellen: Hadoop: The Definitive Guide by Tom White

+0

Vielen Dank. Es hat gut funktioniert. – Jobs