2011-09-18 10 views
5

"हैडोप: द डिफिनिटिव गाइड" पुस्तक में, नीचे दिए गए कोड के साथ एक नमूना कार्यक्रम है।हमें हडोप प्रोग्राम में आउटपुट कुंजी/मूल्य वर्ग को स्पष्ट रूप से सेट करने की आवश्यकता क्यों है?

JobConf conf = new JobConf(MaxTemperature.class); 
conf.setJobName("Max temperature"); 
FileInputFormat.addInputPath(conf, new Path(args[0])); 
FileOutputFormat.setOutputPath(conf, new Path(args[1])); 
conf.setMapperClass(MaxTemperatureMapper.class); 
conf.setReducerClass(MaxTemperatureReducer.class); 
conf.setOutputKeyClass(Text.class); 
conf.setOutputValueClass(IntWritable.class); 

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

उत्तर

7

कारण टाइप एरर [1] है। आपने जेनरिक्स के रूप में आउटपुट के/वी कक्षाएं सेट की हैं। नौकरी सेटअप के दौरान (जो रन टाइम है, संकलन समय नहीं), ये जेनरिक मिटा दिए जाते हैं।

इनपुट के/वी कक्षाओं को इनपुट फ़ाइल से पढ़ा जा सकता है, अनुक्रम फ़ाइल के मामले में कक्षाएं हेडर में हैं- संपादक में अनुक्रम फ़ाइल खोलते समय आप उन्हें पढ़ सकते हैं। यह हेडर लिखा जाना चाहिए, क्योंकि प्रत्येक मानचित्र आउटपुट एक अनुक्रमांक है, इसलिए आपको कक्षाएं प्रदान करने की आवश्यकता है।

[1] http://download.oracle.com/javase/tutorial/java/generics/erasure.html

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