2016-03-03 3 views
5

मैं एचडीएफएस (ड्रिल के साथ पूछताछ करने के लिए) में बहुत सारे एवरो दस्तावेज़ों में लोचदार खोज से निर्यात किए गए डेटा पर एक स्कीमा लागू करने के लिए अपाचे एवरो का उपयोग करने की कोशिश कर रहा हूं। मैं एवरो चूकजेसन दस्तावेजों के एवरो सीरियलाइजेशन के साथ परेशानी फ़ील्ड गुम फ़ील्ड

इस स्कीमा को देखते हुए के साथ कुछ समस्या हो रही है:

{  
    "namespace" : "avrotest",  
    "type" : "record",  
    "name" : "people",                         
    "fields" : [                           
    {"name" : "firstname", "type" : "string"},                   
    {"name" : "age", "type" :"int", "default": -1}                  
    ]                              
} 

मैं उम्मीद थी कि एक json दस्तावेज़ जैसे {"firstname" : "Jane"} उम्र क्षेत्र के लिए -1 का डिफ़ॉल्ट मान का उपयोग कर धारावाहिक की जाएगी।

डिफ़ॉल्ट: इस क्षेत्र के लिए एक डिफ़ॉल्ट मान, उदाहरण पढ़ने के दौरान उपयोग किया जाता है जिसमें इस क्षेत्र (वैकल्पिक) की कमी होती है।

बहरहाल, यह तो होना ही

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) 

यह संभव है नहीं लगता है, या मैं कुछ याद आ रही है?

अग्रिम धन्यवाद

+0

मैं एक ही समस्या – imehl

+0

हाँ, मुझे इसके बारे में बता दिया है :( –

+0

ऐसा लगता है कि इस के लिए प्रतिबद्ध https://github.com/apache/avro/commit/7e4037de2a891fa738aaf8a4f करने से पहले c56f424d6c6833a # diff-c7934590c625ba67bf1b2ad5511a4f58R97 (https://issues.apache.org/jira/browse/AVRO-388) एवरो जेनेरिकडेटम रीडर स्किप किए गए फ़ील्ड के लिए डिफ़ॉल्ट मानों का उपयोग करने में सक्षम था, लेकिन अब यह नहीं कर सकता है। –

उत्तर

0

बिंदु, अगर आप इस तरह स्कीमा में अपने क्षेत्र घोषित:

{"name": "fieldName", "type": ["int", "null"], default: null } 

यह वैकल्पिक तरह एक क्षेत्र का उपयोग करने के लिए पर्याप्त नहीं है, इस तरह यह घोषित करने का प्रयास करें:

{"name": "fieldName", "type": ["null", "int"], default: null } 
संबंधित मुद्दे