【发布时间】:2015-11-04 23:05:45
【问题描述】:
嗨,我的 Reducer 没有打印所需的结果,请查看代码。
这是我的地图功能
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException
{
String str_line = value.toString();
Detail_output1_column_array = str_line.split("\\"+tabSpace);
Outputkey = Detail_output1_column_array[2];
System.out.println(Outputkey);
context.write(new Text(Outputkey),NullWritable.get());
}
}
public static class ShopFile_Reducer extends Reducer<Text,Iterable<NullWritable>,NullWritable,Text> {
public void reduce(Text Key,Iterable<NullWritable> Values,Context context) throws IOException, InterruptedException {
Key = new Text(Key.toString());
context.write(NullWritable.get(),new Text(Key));
}
}
假设 Detail_output1_column_array[2] 包含 01 01 01 02 01 02 01 03 01
reducer 之后我需要这样的输出 01 02 03
但它正在打印所有内容 01 01 01 02 01 02 01 03 01
这是我的驱动类
Configuration Shopconf = new Configuration();
Shopconf.setStrings("DTGroup_input",DTGroup_input);
Job Shop = new Job(Shopconf,"Export_Column_Mapping");
Shop.setJarByClass(ExportColumnMapping.class);
Shop.setJobName("ShopFile_Job");
Shop.setMapperClass(ShopFile_Mapper.class);
Shop.setReducerClass(ShopFile_Reducer.class);
Shop.setInputFormatClass(TextInputFormat.class);
Shop.setOutputFormatClass(TextOutputFormat.class);
Shop.setMapOutputKeyClass(Text.class);
Shop.setMapOutputValueClass(NullWritable.class);
Shop.setOutputKeyClass(Text.class);
Shop.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(Shop, new Path(outputpath+"/Detailsfile/part*"));
FileOutputFormat.setOutputPath(Shop, new Path(outputpath+"/Shopfile"));
Shop.waitForCompletion(true);
【问题讨论】:
-
01 01 01 02 01 02 01 03 01 .... 这是单个值还是各种输入行的映射输出?
-
你的输入格式是什么?在您的代码 sn-p 中,您的映射器实际上将
<"01 01 01 02 01 02 01 03 01", NullWritable>写入减速器,它应该改为写入<"01", NullWritable>、<"01", NullWritable>、<"02", NullWritable>。 -
是输入文件@madhu中各行的map输入。
-
能否使用 system.out.println 打印 reducer 中的关键变量并告诉我们确切的结果
-
@user2018791 no ,maper 输出如你所愿 ,,