KeyValueTextInputFormat逗号分隔符
问题描述:
我使用KeyValueTextInputFormat用于读取/处理逗号分隔的文件:KeyValueTextInputFormat逗号分隔符
100,56
123,68
但是我得到了所有关键的价值,即使在将分隔符设置为逗号(,)后,值字段也会为空。它不挑选分隔符,不知道是什么问题,这里是我的驱动程序代码:
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);
答
它对我来说工作得很好。在我mapred一个代码,我只是改变了以下和它的工作:
- 改变了InputFormatClass使用
KeyValueTextInputFormat
- 新增的配置 -
conf.set("key.value.separator.in.input.line", ",");
- 在映射确信比却一脸的东西像
Mapper<Text,Text,K,V>
,这将使地图()方法的签名是这样的:
公共无效地图(文本键,文本值,OutputCollector输出,记者记者) 抛出IOException异常{}
没有其他的变化是必要的,你必须把第一列的数据作为关键和第二列值。
我猜你可能会错过的唯一事情就是点3
的可能重复[如何指定KeyValueTextInputFormat分离器在Hadoop的0.20 API?](http://stackoverflow.com/questions/9211151/how-to-specified-keyvaluetextinputformat-separator-in-hadoop-20-api) – 2013-02-21 01:07:03
@ChrisGerken - 不重复,这里的问题是值字段将作为null – CassandraCurious 2013-02-21 01:11:12