2012-04-19 12 views
16

एक Combiner मैपर के बाद और प्रसारण से पहले चलाता में क्लास, यह। सभी डेटा किसी दिए गए नोड पर मैपर उदाहरणों द्वारा उत्सर्जित इनपुट के रूप में प्राप्त होगा तो कम करने के लिए उत्पादन का उत्सर्जन करता है।"Combiner" एक mapreduce काम

और यह भी, एक को कम समारोह है, तो दोनों विनिमेय और साहचर्य, तो यह एक Combiner रूप में इस्तेमाल किया जा सकता है।

मेरे प्रश्न क्या वाक्यांश "विनिमेय और साहचर्य" इस स्थिति में क्या मतलब है है

उत्तर

26

मान लें आप संख्या की एक सूची है, 1 2 3 4 5 6.

साहचर्य यहाँ मतलब है कि आप अपने आपरेशन ले जा सकते हैं और किसी भी उपसमूह पर लागू होते हैं तो वे का परिणाम के लिए इसे लागू करते हैं और मिल एक ही जवाब:

(1) + (2 + 3) + (4 + 5 + 6) 
    == 
(1 + 2) + (3 + 4) + (5) + (6) 
    == 
... 

यहां एक कंस्ट्रिनर के निष्पादन के रूप में कोष्ठक के बारे में सोचें।

विनिमेय मतलब यह है कि आदेश कोई फर्क नहीं पड़ता है, तो:

1 + 2 + 3 + 4 + 5 + 6 
    == 
2 + 4 + 6 + 1 + 2 + 3 
    == 
... 

उदाहरण के लिए, इसके अलावा, इस संपत्ति के रूप में पहले देखा फिट बैठता है,। "अधिकतम" उपरोक्त इस संपत्ति को भी फिट करता है, क्योंकि अधिकतम अधिकतम अधिकतम है। अधिकतम (ए, बी) == अधिकतम (बी, ए)।

मेडियन एक उदाहरण है जो काम नहीं करता है: मध्यस्थों का औसत सही औसत नहीं है।


एक combiner के एक और महत्वपूर्ण संपत्ति को न भूलें: कुंजी/मान के लिए इनपुट प्रकार कुंजी/मान के उत्पादन प्रकार एक ही होना चाहिए। उदाहरण के लिए, आप स्ट्रिंग में नहीं ले सकते: int और स्ट्रिंग वापस करें: फ्लोट।

अक्सर बार, रेड्यूसर संख्यात्मक मान के बजाय कुछ प्रकार की स्ट्रिंग आउटपुट कर सकता है, जो आपको संयोजक के रूप में केवल अपने रेड्यूसर में प्लग करने से रोक सकता है।

+0

क्या कोई भी नीचे वोट के कारण पर अनुमान लगा सकता है? मैं वास्तव में जानना चाहता हूं कि मेरा जवाब कुछ कारणों से अच्छा नहीं है, क्योंकि इस तरह मैं लोगों को हर समय संयोजक समझाता हूं। धन्यवाद! –

+0

आपका उत्तर बहुत मददगार है, धन्यवाद –

+0

शानदार जवाब। धन्यवाद! –

10

कम्यूटेटिविटी के लिए, मान लें कि आपके रेड्यूसर को फ़ंक्शन (गणितीय शब्द में) द्वारा प्रतिनिधित्व किया जा सकता है जिसे f() कहा जाता है। फिर अपने कम करने विनिमेय है च (ए, बी) = यदि च (ख, क) उदाहरण के लिए:

  • राशि (ए, बी) राशि (बी, ए)
  • XOR (रूप में ही है ए, बी) XOR (बी, ए)
  • concat रूप में ही है (ए, बी) नहीं concat (बी के रूप में ही है, एक)

संबद्धता के लिए, संपत्ति है कि च है (एफ (ए, बी), सी) = एफ (ए, एफ (बी, सी))। उदाहरण के लिए: (- बी ए) -

  • (ए + बी) + सी के रूप में ए + (बी + C)
  • ही है (बी - - सी सी नहीं एक रूप में ही है)

तो मानचित्र/घटा के संदर्भ में, आपके रेड्यूसर को इन 2 गुणों का सम्मान करना होगा। उदाहरण के लिए, यदि आपका रेड्यूसर केवल एक योग(), या अधिकतम() कर रहा है, तो यह दोनों गुणों का सम्मान करता है, लेकिन कुछ() या माध्य() जैसे कुछ नहीं है, और इस प्रकार आप इसे संयोजक के रूप में उपयोग नहीं कर सकते हैं।

मैं व्यक्तिगत रूप से है कि नक्शे चरण एक अनुकूलन के रूप में के बाद स्मृति में चलने वाले नेटवर्क यातायात को कम करने के रूप में मिनी reducers समेलक देखते हैं, और commutativity/संबद्धता वास्तव में समझ में आता है, तो आप देख एक मानचित्र/इस तरह से कम करें:

enter image description here

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