यदि आपने पहले से तय नहीं किया है, तो मैं आगे जाऊंगा और आपके डेटा के लिए एवरो स्कीमा लिखूंगा। एक बार ऐसा करने के बाद, एवरो कंटेनर फ़ाइलों और लकड़ी की छत फ़ाइलों के बीच चयन करना आसान होता है जैसे कि स्वैपिंग जैसे,
job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());
के लिये
job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());
लिखने के पक्ष में Parquet प्रारूप थोड़ा अधिक कम्प्यूटेशनल रूप से गहन लगता है - उदाहरण के लिए, बफ़रिंग और CPU को डेटा आदि के लिए रैम की आवश्यकता होती है, लेकिन यह I / O, भंडारण और हस्तांतरण लागत को कम करने के साथ-साथ कुशल भी बनाता है। विशेष रूप से SQL- जैसे (जैसे, हाइव या स्पार्कक्यूएस) प्रश्नों के साथ पढ़ता है जो केवल कॉलम के एक हिस्से को संबोधित करते हैं।
एक परियोजना में, मैंने Parquet से Avro कंटेनरों में पुन: प्रवेश किया क्योंकि स्कीमा बहुत व्यापक और नेस्टेड था (कुछ काफी पदानुक्रमिक ऑब्जेक्ट-ओरिएंटेड क्लासेस से प्राप्त किया गया था) और परिणामस्वरूप Parquet कॉलम की अधिकतम संख्या। बदले में, हमारे पंक्ति समूह वास्तव में व्यापक और उथले थे, जिसका अर्थ था कि यह हमेशा के लिए लिया गया था इससे पहले कि हम प्रत्येक समूह के अंतिम कॉलम में छोटी संख्या में पंक्तियों को संसाधित कर सकें।
मुझे अभी तक अधिक सामान्यीकृत / समझदार डेटा के लिए लकड़ी की छत का उपयोग करने का अधिक मौका नहीं मिला है, लेकिन मैं समझता हूं कि यदि अच्छी तरह से उपयोग किया जाता है, तो यह महत्वपूर्ण प्रदर्शन में सुधार के लिए अनुमति देता है।