你好,我試圖實現java hadoop應用程序。我想製作<對象,文本,NaicsAreaPair,LongWritable >(所以mapper的輸出將是NaicsAreaPair作爲鍵和LongWritable作爲值)。然後,我需要組合器像< NaicsAreaPair,LongWritable,Text,AreaWagePair >所以輸入與映射器輸出是正確的,但組合器輸出不同於映射器輸出。hadoop中映射器和合並器的不同上下文類型
我在主類此配置:
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "NY statistics");
job.setJarByClass(NYStatisticsOwnWritableComparable.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(Combiner.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(NaicsAreaPair.class);
job.setOutputValueClass(LongWritable.class);
//job.setPartitionerClass(Rozdelovac.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
//job.setNumReduceTasks(3);
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
在這裏我要說的輸出鍵和產值將使用哪個。有沒有可能爲mapper使用這個輸出鍵和值來設置它,但對於組合器使用不同?
非常感謝您的回答
我用它,因爲我想在mapper naics作爲關鍵和區域與工資作爲價值。然後在Combiner中,我想將每個區域的所有工資總和,並把它作爲關鍵區域和工資總額作爲價值發送,然後在縮減器中,我只想找到每個區域中每個區域的最大值。如果我贏了不使用組合器爲此,我將需要使用減速器2次(一次用於求和,一次用於最大值)不是嗎?在這一點上,組合器會使數據變小一點(不是每個naic的區域數)嗎? – DaMi
您可以使用組合器來執行聚合(僅此而已),因此輸出類型與其輸入類型相同。在縮減器中,您可以找到每個輸入鍵的最大類型。 – bl3e