2015-03-02 10 views
6

Sto usando Apache avro per la serializzazione dei dati. Poiché i dati hanno uno schema fisso, non voglio che lo schema faccia parte dei dati serializzati. Nell'esempio seguente, lo schema è una parte del file avro "users.avro".Come generare file avro senza schema utilizzando avro apache?

User user1 = new User(); 
user1.setName("Alyssa"); 
user1.setFavoriteNumber(256); 
User user2 = new User("Ben", 7, "red"); 
User user3 = User.newBuilder() 
     .setName("Charlie") 
     .setFavoriteColor("blue") 
     .setFavoriteNumber(null) 
     .build(); 

// Serialize user1 and user2 to disk 
File file = new File("users.avro"); 
DatumWriter<User> userDatumWriter = new SpecificDatumWriter<User>(User.class); 
DataFileWriter<User> dataFileWriter = new DataFileWriter<User (userDatumWriter); 
dataFileWriter.create(user1.getSchema(), new File("users.avro")); 
dataFileWriter.append(user1); 
dataFileWriter.append(user2); 
dataFileWriter.append(user3); 
dataFileWriter.close(); 

Qualcuno può dirmi come archiviare i file avro senza schema incorporato?

risposta

0

Dovrebbe essere fattibile.

Dato un encoder, è possibile utilizzare un DatumWriter per scrivere i dati direttamente in un ByteArrayOutputStream (che è possibile quindi scrivere in un file java.io.File).

Ecco come iniziare a Scala (da Salat-Avro):

val baos = new ByteArrayOutputStream 
val encoder = EncoderFactory.get().binaryEncoder(baos, null) 
encoder.write(myRecord, encoder) 
2

Here a trovare una vasta come in cui spiego come realizzare la serializzazione dello schema-less usando Apache Avro. Una campagna di test companion mostra alcune cifre sulle prestazioni che potresti aspettarti.

code is on GitHub: esempi e classi di test mostrano come utilizzare Data Reader e Writer con una classe Stub generata da Avro stesso.

+0

Utilizzando l'approccio descritto nel codice è possibile specificare un codec? Cioè generare schemi di Avro che, ad esempio, si sgonfiano compressi? –