我正在使用KeyValueTextInputFormat来读取/处理逗号分隔文件:
100,56
89586个
123,68
但是我获得了key中的所有值,即使在将分隔符设置为逗号(,)之后,值字段仍为null。它没有选择分隔符,不确定是什么问题,这是我的驱动程序代码:
Configuration conf = new Configuration();
conf.set("key.value.separator.in.input.line", ",");
Job job = new Job(conf, "citation data");
job.setJarByClass(Citation.class);
job.setJobName("citation data");
job.setMapperClass(MapClass.class);
job.setReducerClass(ReduceClass.class);
job.setInputFormatClass(KeyValueTextInputFormat.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
KeyValueTextInputFormat.addInputPath(job, new Path("input/sample.txt"));
FileOutputFormat.setOutputPath(job, new Path("output2"));
System.exit(job.waitForCompletion(true)?0:1);
答案 0 :(得分:0)
它对我来说非常好。在我的一个mapred代码中,我刚刚更改了以下内容并且它有效:
KeyValueTextInputFormat
conf.set("key.value.separator.in.input.line", ",");
Mapper<Text,Text,K,V>
,这会使map()方法的签名如下:public void map(文字键,文字值,OutputCollector输出,Reporter记者) 抛出IOException {}
无需进行其他更改,您必须将第一列的数据作为键,第二列作为值。
我想你唯一可能错过的就是第3点。