2015-03-02 5 views
6

मैं डेटा क्रमबद्धता के लिए अपाचे एवरो का उपयोग कर रहा हूं। चूंकि, डेटा में एक निश्चित स्कीमा है, मैं नहीं चाहता कि स्कीमा धारावाहिक डेटा का हिस्सा बनें। निम्न उदाहरण में, स्कीमा एवरो फ़ाइल "users.avro" का हिस्सा है।apache avro का उपयोग कर स्कीमा-कम एवरो फ़ाइलों को कैसे उत्पन्न करें?

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(); 

क्या कोई मुझे बता सकता है कि इसमें एम्बेडेड स्कीमा के बिना एवरो-फाइलों को कैसे स्टोर किया जाए?

उत्तर

0

ऐसा करने योग्य होना चाहिए।

एन्कोडर को देखते हुए, आप डेटा को सीधे बाइटएरे ऑटपुटस्ट्रीम (जिसे आप java.io.File पर लिख सकते हैं) को लिखने के लिए डेटामवाइटर का उपयोग कर सकते हैं।

यहाँ स्काला में कैसे शुरुआत की जाए (Salat-Avro से) है:

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

Here आप एक व्यापक लगता है कि कैसे करने के लिए है, जिसमें मैं कैसे अपाचे एवरो का उपयोग कर स्कीमा-कम क्रमबद्धता को प्राप्त करने के लिए समझाने। एक साथी परीक्षण अभियान उस प्रदर्शन पर कुछ आंकड़े दिखाता है जो आप उम्मीद कर सकते हैं।

code is on GitHub: उदाहरण और परीक्षण कक्षाएं डेटा रीडर और राइटर का उपयोग एवरो द्वारा उत्पन्न स्टब क्लास के साथ कैसे करें।

+0

आपके कोड में वर्णित दृष्टिकोण का उपयोग करना एक कोडेक निर्दिष्ट करना संभव है? अर्थात। स्कीमलेस एवरो उत्पन्न करें, उदाहरण के लिए, संकुचित डिफ्लेट करें? –

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