Apache Pig UDF: पार्ट 3 - स्टोर फ़ंक्शंस



यह पोस्ट Apache Pig UDF - Store के कार्यों के बारे में बताता है। (अपाचे सुअर यूडीएफ: भाग 3)। Apache Pig UDF के स्टोर फ़ंक्शंस पर एक नज़र डालें।

StoreFunc अमूर्त वर्ग में डेटा संग्रहीत करने के लिए मुख्य विधियां हैं और अधिकांश उपयोग के मामलों के लिए इसे विस्तारित करने के लिए पर्याप्त होना चाहिए। एक वैकल्पिक इंटरफ़ेस है जिसे विस्तारित कार्यक्षमता प्राप्त करने के लिए लागू किया जा सकता है:





स्टोरमैडेटा

इस इंटरफ़ेस में स्कीमा और आँकड़े संग्रहीत करने के लिए मेटाडेटा सिस्टम के साथ सहभागिता करने के तरीके हैं। यह इंटरफ़ेस वैकल्पिक है और इसे तभी लागू किया जाना चाहिए जब मेटाडेटा को संग्रहीत करने की आवश्यकता हो।

StoreFunc में जिन तरीकों को ओवरराइड करने की आवश्यकता है, उन्हें नीचे समझाया गया है:



  • getOutputFormat ():

    इस विधि को Storer द्वारा इस्तेमाल किया जा रहा OutputFormat प्राप्त करने के लिए Pig द्वारा बुलाया जाएगा। OutputFormat में तरीकों को सुअर द्वारा उसी तरीके से और उसी संदर्भ में कहा जाएगा जैसा कि मैप-कम जावा प्रोग्राम में हैडोप द्वारा किया जाता है। यदि OutputFormat एक Hadoop पैक है, तो कार्यान्वयन को नए API का उपयोग org.apache.hadoop.mapreduce के तहत करना चाहिए। यदि यह एक कस्टम आउटपुटफ़ॉर्मैट है, तो इसे org.apache.hadoop.mapreduce के तहत नए API का उपयोग करके लागू किया जाना चाहिए। OutputFormat के CheckOutputSpecs () विधि को आउटपुट स्थान की जांच करने के लिए सुअर द्वारा बुलाया जाएगा। यह विधि नौकरी शुरू होने पर Hadoop कॉल अनुक्रम के भाग के रूप में भी कहा जाएगा। इसलिए कार्यान्वयन सुनिश्चित करना चाहिए कि असंगत साइड इफेक्ट के बिना इस विधि को कई बार कहा जा सकता है।

  • setStoreLocation ():

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

  • तैयारटॉराइट ():

    नए API में, डेटा का लेखन StoreFunc द्वारा प्रदान किए गए OutputFormat के माध्यम से होता है। ReadyToWrite () में StoreFunc द्वारा दिए गए OutputFormat से जुड़े RecordWriter को StoreFunc को पास किया जाता है। RecordWriter को तब putNext () में कार्यान्वयन द्वारा उपयोग किया जा सकता है, जो कि Tuple लिखने के लिए RecordWriter द्वारा अपेक्षित तरीके से डेटा रिकॉर्ड का प्रतिनिधित्व करता है।

  • putNext ():

    PutNext () का अर्थ नहीं बदला है और डेटा के अगले टपल को लिखने के लिए सुअर रनटाइम द्वारा बुलाया जाता है - नए एपीआई में, यह वह विधि है जिसमें कार्यान्वयन टुपल को लिखने के लिए अंतर्निहित RecordWriter का उपयोग करेगा।

StoreFunc में डिफ़ॉल्ट कार्यान्वयन:

  • setStoreFuncUDFContextSignature ():

    इस विधि को सुअर द्वारा बुलाया जाएगा दोनों आगे और पीछे के अंत में स्टॉपर को एक अद्वितीय हस्ताक्षर पास करने के लिए। हस्ताक्षर का उपयोग UDFContext में किसी भी जानकारी को संग्रहीत करने के लिए किया जा सकता है, जिसे स्टॉपर को आगे और पीछे के अंत में विभिन्न विधि चालानों के बीच संग्रहीत करने की आवश्यकता होती है। StoreFunc में डिफ़ॉल्ट कार्यान्वयन के पास एक खाली निकाय है। इस विधि को किसी अन्य तरीकों से पहले कहा जाएगा।

  • relToAbsPathForStoreLocation ():

    सुअर रनटाइम इस विधि को कॉल करेगा ताकि स्टॉपर को एक रिश्तेदार स्टोर स्थान को निरपेक्ष स्थान पर परिवर्तित करने की अनुमति मिल सके। StoreFunc में एक कार्यान्वयन प्रदान किया जाता है जो FileSystem आधारित स्थानों के लिए इसे संभालता है।

  • checkSchema ():

    एक स्टोर फ़ंक्शन को इस फ़ंक्शन को यह जांचने के लिए लागू करना चाहिए कि किसी दिए गए स्कीमा में डेटा को लिखा जाना स्वीकार्य है। StoreFunc में डिफ़ॉल्ट कार्यान्वयन के पास एक खाली निकाय है। इस विधि को किसी भी कॉल से पहले setStoreLocation () में बुलाया जाएगा।

उदाहरण कार्यान्वयन:

उदाहरण में स्टेपर कार्यान्वयन, लाइन डेलिमर के साथ line के रूप में टेक्स्ट डेटा के लिए एक स्टॉपर है
डिफ़ॉल्ट फ़ील्ड सीमांकक के रूप में ‘और‘ can (जो कंस्ट्रक्टर में एक अलग फ़ील्ड सीमांकक पास करके ओवरराइड किया जा सकता है) - यह पिग में वर्तमान पिगस्टोरीज स्टायरर के समान है। कार्यान्वयन मौजूदा Hadoop समर्थित OutputFormat - TextOutputFormat को अंतर्निहित OutputFormat के रूप में उपयोग करता है।

सार्वजनिक वर्ग SimpleTextStorer StoreFunc {संरक्षित RecordWriter लेखक = null निजी बाइट फ़ील्डDel = ’’ निजी स्थिर अंतिम int BUFFER_SIZE = 1024 निजी स्थिर अंतिम स्ट्रिंग UTF8 = F UTF-8 ’सार्वजनिक PigStorage () {} सार्वजनिक PigStorage (स्ट्रिंग सीमांकक) {/} का विस्तार करता है ) यदि (delimiter.length () == 1) {this.fieldDel = (बाइट) delimiter.charAt (0)} और यदि (delimiter.length ()> 1delimiter.chartt (0) == ') {स्विच] delimiter.charAt (1)) {case 't': this.fieldDel = (byte) '' ब्रेक केस 'x': fieldDel = Integer.valueOf (delimiter.substring (2, 16) .byteValue () ब्रेक केस)। u ': this.fieldDel = Integer.valueOf (delimiter.substring (2))। बाइटवैल्यू () डिफॉल्ट डिफ़ॉल्ट: थ्रो न्यू रंटिमेसेप्शन (' अज्ञात सीमांकक + डेलीगेटर)}}} अन्य {नया रंटमएक्सेप्शन ('पिगस्टोरीज डेलमीटर) फेंकना चाहिए सिंगल कैरेक्टर ')}} बाइटएयरऑउटपुटस्ट्रीम माउट = न्यू बाइटएयर ऑउटपुट न्यूट्रीस्ट्रीम (BUFFER_SIZE) @ ऑवरराइड पब्लिक void putNext (टुपल f) IOException {int sz = f.size () के लिए (int i = 0 i = 0 i)।

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया टिप्पणी अनुभाग में उनका उल्लेख करें और हम आपके पास वापस आ जाएंगे।

संबंधित पोस्ट:



अपाचे सुअर यूडीएफ: भाग 2
अपाचे सुअर यूडीएफ: भाग 1