कई वास्तविक दुनिया परिदृश्यों में, डेटासेट में मूल्यों की कार्डिनालिटी अपेक्षाकृत छोटी होगी। अपने डेटासेट में
- गणना मूल्यों की आवृत्तियों (शब्द गणना काम, मूल रूप से)
- पहचान नक्शाकार + एक कम करने जो मंझला की गणना करता है < मूल्य के आधार पर: ऐसे मामलों में, समस्या कुशलता से दो MapReduce नौकरियों के साथ हल किया जा सकता - आवृत्ति> जोड़े
नौकरी 1. डेटा की मात्रा को काफी कम कर देगा और समानांतर में पूरी तरह से निष्पादित किया जा सकता है। नौकरी के Reducer 2. केवल n
(n
= cardinality of your value set
) सभी मूल्यों के बजाय वस्तुओं को निष्क्रिय दृष्टिकोण के साथ संसाधित करना होगा।
नीचे, नौकरी का एक उदाहरण reducer 2. यह पाइथन लिपि है जिसका उपयोग सीधे हडोप स्ट्रीमिंग में किया जा सकता है। मान लिया गया है अपने डेटासेट में मूल्यों ints
हैं, लेकिन आसानी से इस उत्तर के लिए एक सुझाव शुरू में Chris White की answer से आ रही के शीर्ष पर बनाता है के लिए double
रों
import sys
item_to_index_range = []
total_count = 0
# Store in memory a mapping of a value to the range of indexes it has in a sorted list of all values
for line in sys.stdin:
item, count = line.strip().split("\t", 1)
new_total_count = total_count + int(count)
item_to_index_range.append((item, (total_count + 1, new_total_count + 1)))
total_count = new_total_count
# Calculate index(es) of middle items
middle_items_indexes = [(total_count/2) + 1]
if total_count % 2 == 0:
middle_items_indexes += [total_count/2]
# Retrieve middle item(s)
middle_items = []
for i in middle_items_indexes:
for item, index_range in item_to_index_range:
if i in range(*index_range):
middle_items.append(item)
continue
print sum(middle_items)/float(len(middle_items))
अपनाया जा सकता है। उत्तर मूल्यों की आवृत्तियों की गणना करने के लिए एक संयोजन के रूप में एक combiner का उपयोग करने का सुझाव देता है। हालांकि, MapReduce में, संयोजकों को हमेशा निष्पादित होने की गारंटी नहीं है। - आवृत्ति> जोड़े और फिर मंझला गणना
- कम करने पहले फाइनल < मूल्य की गणना करना होगा: यह कुछ साइड इफेक्ट है।
- सबसे खराब स्थिति में, समेलक मार डाला कभी नहीं किया जाएगा और कम करने अभी भी सभी व्यक्तिगत मूल्यों
प्रसंस्करण सटीक quantiles ढूँढना इस दृष्टिकोण एमी में बहुत महंगा हो सकता है अनुभवहीन दृष्टिकोण की तुलना में बेहतर है, हालांकि के साथ संघर्ष करना होगा । चरण 1 से 4 वास्तव में सेट को विभाजित करने में मदद करता है और एक छोटी सी जगह में एक ही समस्या को हल करता है। लेकिन इस दृष्टिकोण में, यह वास्तव में मात्रा प्राप्त करने के लिए चरण 4 से चरण 4 के लॉग इन पुनरावृत्तियों को ले सकता है। – Sourabh