Sto tentando di utilizzare Apache Avro per applicare uno schema sui dati esportati da Elastic Search in molti documenti Avro in HDFS (da interrogare con Drill). Sto avendo qualche problema con le impostazioni predefinite AvroProblemi con la serializzazione Avro di documenti json campi mancanti
Dato questo schema:
{
"namespace" : "avrotest",
"type" : "record",
"name" : "people",
"fields" : [
{"name" : "firstname", "type" : "string"},
{"name" : "age", "type" :"int", "default": -1}
]
}
mi aspetto che un documento JSON come {"firstname" : "Jane"}
sarebbe serializzato utilizzando il valore predefinito per il campo -1
età.
predefinito: un valore predefinito per questo campo, utilizzato durante la lettura delle istanze che non dispongono di questo campo (facoltativo).
Tuttavia, questo non sembra accadere
java -jar avro-tools-1.8.0.jar fromjson --schema-file p2.avsc jane.json > jane.avro
Exception in thread "main" org.apache.avro.AvroTypeException: Expected int. Got END_OBJECT
at org.apache.avro.io.JsonDecoder.error(JsonDecoder.java:697)
at org.apache.avro.io.JsonDecoder.readInt(JsonDecoder.java:172)
at org.apache.avro.io.ValidatingDecoder.readInt(ValidatingDecoder.java:83)
at org.apache.avro.generic.GenericDatumReader.readInt(GenericDatumReader.java:511)
at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:182)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:152)
at org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:240)
at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:230)
at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:174)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:152)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:144)
at org.apache.avro.tool.DataFileWriteTool.run(DataFileWriteTool.java:99)
at org.apache.avro.tool.Main.run(Main.java:87)
at org.apache.avro.tool.Main.main(Main.java:76)
Questo è possibile, o mi sto perdendo qualcosa?
Grazie in anticipo
Ho lo stesso problema – imehl
Sì, mi dica su di esso :( –
Sembra che prima di questo impegno https://github.com/apache/avro/commit/7e4037de2a891fa738aaf8a4f c56f424d6c6833a # diff-c7934590c625ba67bf1b2ad5511a4f58R97 (https://issues.apache.org/jira/browse/AVRO-388) Avro GenericDatumReader è stato in grado di utilizzare i valori predefiniti per i campi saltati, ma non è più possibile farlo. –