Monday, 15 February 2010

Hadoop - Produce multiple values for a single key -


मैं अपनी आवश्यकता के अनुसार हौप में wordcount प्रोग्राम को सफलतापूर्वक बदल कर सका। हालांकि, मुझे एक और स्थिति है जहां में मैं 3 मानों के लिए एक ही कुंजी का उपयोग करता हूं। मान लें कि मेरी इनपुट फाइल नीचे दी गई है

  एक अपरकेस 1 पहले नंबर नहीं मैं एक छोटे से छोटे अक्षर b। अपरकेस 2 secondnumber II romannumber b लोअरकेस   

वर्तमान में मेरे नक्शे में / प्रोग्राम कम करें, मैं ऐसा कुछ कर रहा हूँ नीचे। यहां ए कुंजी है और 1 मूल्य है।

  ए 1   

मुझे अपने मानचित्र को नीचे की तरह कुछ करने के लिए कम करना होगा।

  ए 1 मैं   

मैं उन्हें नीचे की तरह 3 अलग-अलग कार्यक्रमों में कर सकता हूं और आउटपुट का उत्पादन कर सकता हूं।

  ए 1 ए मैं ए   

हालांकि, मैं उन्हें एक कार्यक्रम में ही करना चाहता हूं असल में, मेरे नक्शा समारोह से मैं यह करना चाहता हूं।

  संदर्भ.लिखित (कुंजी, मान 1); context.write (कुंजी, मान 2); context.write (कुंजी, value3);   

क्या कोई ऐसा तरीका है जो मैं इसे तीन अलग-अलग कार्यक्रम लिखने के बजाय एक ही कार्यक्रम में कर सकता हूं?

संपादित करें:

मुझे एक अधिक स्पष्ट उदाहरण। मुझे नीचे की तरह कुछ करना चाहिए

  एक अपरकेस 1 पहलेनंबर 1.0 फ्लोटनम्बर स्ट्र स्ट्रिंग चेकिंग एक अपरकेस 2 सेकंडनम्बर 2.0 फ्लोटनंबर आईएनजी स्ट्रिंगचेकिंग   

मेरा अंतिम आउटपुट होगा,

  ए 3 3.0 स्ट्रिंग   

3 दो पूर्णांक का योग है, 3.0 फ्लोट संख्या का योग है और स्ट्रिंग दो स्ट्रिंग्स का समाकलन है।

सबसे पहले आपको अपने सभी तीन मानकों के लिए समग्र लिखने योग्य की आवश्यकता होगी।

  सार्वजनिक वर्ग संमिश्र मूल्ययोग्य लेखन योग्य {int val1 = 0; फ़्लैट वैल 2 = 0; स्ट्रिंग वैल 3 = ""; सार्वजनिक संमिश्र () {} सार्वजनिक संमिश्र विरेटिव (इंट वैल 1, फ्लोट वैल 2, स्ट्रिंग वैल 3) {this.val1 = val1; This.val2 = val2; This.val3 = val3; } @ ओवरराइड पब्लिक वाइड रीडफिल्ड (डेटाइनपूट इन) IOException फेंकता {val1 = in.readInt (); Val2 = in.readFloat (); Val3 = WritableUtils.readString (इन); } @ ओवरराइड पब्लिक रिक्त लिखित (डेटा आउटपुट आउट) IOException फेंकता {out.writeInt (val1); out.writeFloat (val2); WritableUtils.writeString (बाहर, val3); } सार्वजनिक शून्य मर्ज (कम्पोजिट योग्य अन्य) {this.val1 + = other.val1; This.val2 + = other.val2; This.val3 + = other.val3; } @ ओवरराइड सार्वजनिक स्ट्रिंग टूस्ट्रिंग () {return.val1 + "\ t" + this.val2 + "\ t" + this.val3; }}   

फिर कम करने में आप ऐसा कुछ करेंगे ...

  सार्वजनिक शून्य कम करें (पाठ कुंजी, अयोग्य और लिखित; संमिश्र-योग्य & gt; मूल्य, संदर्भ सीटीएक्स) IOException फेंकता है, बाधित; एक्सपेशेशन {संमिश्र विशय योग्य; के लिए (संमिश्र मूल्ययोग्य अगले: मान) {out.merge (अगले); } Ctx.write (कुंजी, बाहर); }   

आपका मैपर केवल एक समग्र मानकों प्रति नक्शे आउटपुट करेगा।

मैंने इसे संकलित करने की कोशिश नहीं की है, लेकिन सामान्य विचार है क्या आप वहां मौजूद हैं।

No comments:

Post a Comment