2013-07-25 9 views
5

Non ho trovato nulla nella documentazione su questo, solo bla generico sui valori di default. La mia ipotesi è che dovrebbe funzionare in questo modo:Come specificare un valore predefinito per un enum usando avro IDL?

enum MyEnum { 
    UNSPECIFIED, 
    SPECIFIED 
} 

record Test { 
    MyEnum e = "UNSPECIFIED"; 
} 

Il GenericDatumReader in Java si lamenta, purtroppo, che sta trovando una stringa, ma si aspetta un MyEnum.

Qualcuno può confermare che questo è il modo corretto di utilizzare un enum con un valore predefinito utilizzando avro IDL? In tal caso ho un bug altrove. Qualcuno può confermare che questo non è il modo di farlo e correggermi? Qualsiasi input è apprezzato!

Aggiornamento: Nella mia versione del mondo reale, sembra che un enum appena aggiunto al record stia causando il problema anche se ha un valore predefinito. Ciò significa che lo schema del mio lettore prevede un enum, mentre il record non ne contiene uno. L'evoluzione dello schema dovrebbe essere in grado di risolvere questo problema, ma sembra fallire. Ulteriori dettagli: sto lavorando con Pig qui, non con Java diretto.

risposta

3

Ok, risulta questo è davvero il modo corretto per specificare un valore predefinito per un enum in un IDL avro. Nel mio caso un sindacato {null, string} era stato sostituito da un enum che causava tutti i problemi. Quindi ricorda: non modificare il tipo di campo in avro!

0

Non so IDL avro ma se si è sicuri 'sintassi record`, è possibile utilizzare questo codice per convertire la stringa al tipo enum

MyEnum e = Enum.valueOf(MyEnum.class, "UNSPECIFIED") 
+0

Grazie per la risposta, ma questa non è un'opzione per me in quanto sono dipendente dall'evoluzione dello schema avro (che sembra fallire per un enum appena aggiunto in questo momento). – LiMuBei

Problemi correlati