2016-08-04 8 views
11

में मैं एक Hadoop परियोजना पर और विभिन्न ब्लॉगों के लिए कई यात्रा के बाद काम कर रहा हूँ और प्रलेखन पढ़ने, मुझे एहसास हुआ कि मैं Hadoop ढांचे द्वारा प्रदान की secondry तरह सुविधा का उपयोग करने की जरूरत है।माध्यमिक क्रमबद्ध Hadoop

मेरे इनपुट प्रारूप फार्म की है:

DESC(String) Price(Integer) and some other Text

मैं कम करने में मानों मूल्य के अवरोही क्रम होना चाहता हूँ। डीईएससी की तुलना करते समय मेरे पास एक विधि है जो दो तार और प्रतिशत लेती है और यदि दोनों तारों के बीच समानता बराबर होती है या प्रतिशत से अधिक है तो मुझे उन्हें बराबर मानना ​​चाहिए।

समस्या के बाद कम नौकरी समाप्त हो गया है मैं कुछ DESC जो अन्य स्ट्रिंग के समान है और अभी तक वे अलग अलग समूह में हैं देख सकते हैं।

यहाँ समग्र कुंजी

public int compareTo(VendorKey o) { 
    int result =- 
    result = compare(token, o.token, ":") >= percentage ? 0:1; 
    if (result == 0) { 
     return pid> o.pid ?-1: pid < o.pid ?1:0; 
    } 
    return result; 
} 

और तुलना समूहीकरण की विधि की मेरी compareTo विधि तुलनाकारी

public int compare(WritableComparable a, WritableComparable b) { 
    VendorKey one = (VendorKey) a; 
    VendorKey two = (VendorKey) b; 
    int result = ClusterUtil.compare(one.getToken(), two.getToken(), ":") >= one.getPercentage() ? 0 : 1; 
    // if (result != 0) 
    // return two.getToken().compareTo(one.getToken()); 
    return result; 
} 
+0

तुलना को ठीक करने के लिए विधि आपके लिए काम करता है? – aventurin

उत्तर

0

ऐसा लगता है कि आपके compareTo विधि आम contract कि sgn(x.compareTo(y)) की आवश्यकता है -sgn(y.compareTo(x)) के बराबर होना उल्लंघन करता है ।

0

अपने कस्टम के बाद, एक मूल विभाजक को एक समग्र कुंजी और NullWritable मान के साथ दें। उदाहरण के लिए:

public class SecondarySortBasicPartitioner extends 
    Partitioner<CompositeKeyWritable, NullWritable> { 

    public int getPartition(CompositeKeyWritable key, NullWritable value, 
      int numReduceTasks) { 

     return (key.DEPT().hashCode() % numReduceTasks); 
    } 
} 

और यह कुंजी प्रकार तुलनित्र निर्दिष्ट और 2 compositeKeyWritable चर के साथ समूहीकरण किया जाएगा के बाद। विभाजन, और छंटाई समूहीकरण:

0

फेरबदल के दौरान 3 प्रक्रियाओं कर रहे हैं। मुझे लगता है कि आपके पास कई reducers हैं और आपके समान परिणामों को अलग-अलग विभाजन में संसाधित करने के लिए विभिन्न reducers द्वारा संसाधित किया गया था।

आप रेड्यूसर की संख्या 1 पर सेट कर सकते हैं या एक कस्टम पार्टिशनर सेट कर सकते हैं जो आपके काम के लिए org.apache.hadoop.mapreduce.Partitioner बढ़ाता है।

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