2013-07-25 9 views
5

मुझे इस बारे में प्रलेखन में कुछ भी नहीं मिला है, केवल डिफ़ॉल्ट मानों के बारे में जेनेरिक ब्लै। मेरे धारणा थी कि यह इस तरह काम करना चाहिए:एवरो आईडीएल का उपयोग कर एनम के लिए डिफ़ॉल्ट मान कैसे निर्दिष्ट करें?

enum MyEnum { 
    UNSPECIFIED, 
    SPECIFIED 
} 

record Test { 
    MyEnum e = "UNSPECIFIED"; 
} 

जावा में GenericDatumReader दुर्भाग्य से शिकायत है कि वह एक स्ट्रिंग हो रही है, लेकिन एक MyEnum की उम्मीद है।

क्या कोई यह पुष्टि कर सकता है कि एवरो आईडीएल का उपयोग करके एक डिफ़ॉल्ट मूल्य के साथ एनम का उपयोग करने का यह सही तरीका है? उस स्थिति में मेरे पास कहीं और एक बग है। क्या कोई यह पुष्टि कर सकता है कि ऐसा करने का तरीका नहीं है और मुझे सही करें? किसी भी इनपुट की सराहना की है!

अद्यतन: इस के मेरे असली विश्व संस्करण में, ऐसा लगता है कि रिकॉर्ड में एक नया जोड़ा गया मुद्दा समस्या का कारण बन रहा है, भले ही इसका डिफ़ॉल्ट मान हो। इसका मतलब है कि मेरे पाठक स्कीमा एक enum की उम्मीद है, जबकि रिकॉर्ड में एक नहीं है। स्कीमा विकास इसे हल करने में सक्षम होना चाहिए, लेकिन असफल लगता है। अधिक जानकारी: मैं यहां पिग के साथ काम कर रहा हूं, सीधे जावा नहीं।

उत्तर

3

ठीक करने के लिए अपने स्ट्रिंग परिवर्तित करने के लिए इस कोड का उपयोग कर सकते हैं, पता चला है यह वास्तव में सही तरीका क्या है एक एवरो आईडीएल में एक enum के लिए एक डिफ़ॉल्ट मान निर्दिष्ट करने के लिए। मेरे मामले में एक संघ {शून्य, स्ट्रिंग} को एक enum द्वारा प्रतिस्थापित किया गया था जिससे सभी परेशानी हुई। तो याद रखें: avro में किसी फ़ील्ड के प्रकार को न बदलें!

0

मैं एवरो आईडीएल पता नहीं है, लेकिन यदि आप 'यकीन है record` वाक्य रचना, आप अपने enum प्रकार

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

उत्तर के लिए धन्यवाद, लेकिन यह मेरे लिए कोई विकल्प नहीं है क्योंकि मैं एवरो स्कीमा विकास पर निर्भर हूं (जो अभी हाल ही में एक नए जोड़े गए एनम के लिए विफल है)। – LiMuBei

संबंधित मुद्दे