如何在Hadoop-.20 api中指定KeyValueTextInputFormat分隔符?

在新的API(apache.hadoop.mapreduce.KeyValueTextInputFormat)中,如何指定除tab之外的分隔符(分隔符)(默认值)以分隔键和值。

样本输入:

one,first line two,second line 

输出要求:

 Key : one Value : first line Key : two Value : second line 

我将KeyValueTextInputFormat指定为:

  Job job = new Job(conf, "Sample"); job.setInputFormatClass(KeyValueTextInputFormat.class); KeyValueTextInputFormat.addInputPath(job, new Path("/home/input.txt")); 

这适用于tab作为分隔符。

在较新的API中,您应该使用mapreduce.input.keyvaluelinerecordreader.key.value.separator配置属性。

这是一个例子:

 Configuration conf = new Configuration(); conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", ","); Job job = new Job(conf); job.setInputFormatClass(KeyValueTextInputFormat.class); // next job set-up 

请在驱动程序代码中设置以下内容。

 conf.set("key.value.separator.in.input.line", ","); 

对于KeyValueTextInputFormat ,输入行应该是由“\ t”分隔的键值对

 Key1 Value1,Value2 

通过更改默认分隔符,您可以根据需要进行阅读。

对于新的Api

这是解决方案

 //New API Configuration conf = new Configuration(); conf.set("key.value.separator.in.input.line", ","); Job job = new Job(conf); job.setInputFormatClass(KeyValueTextInputFormat.class); 

地图

 public class Map extends Mapper { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Text key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); System.out.println("key---> "+key); System.out.println("value---> "+value.toString()); . . 

产量

 key---> one value---> first line key---> two value---> second line 

这是序列问题。

第一行conf.set("key.value.separator.in.input.line", ",")必须在创建Job类的实例之前。 所以:

 conf.set("key.value.separator.in.input.line", ","); Job job = new Job(conf); 

首先,新的API没有在0.20。*中完成。所以如果你想在0.20。*中使用新的API,你应该自己实现这个function。例如,你可以使用FileInputFormat来实现。 忽略LongWritable键,并自己在逗号上拆分Text值。

默认情况下, KeyValueTextInputFormat类使用tab作为输入文本文件中键和值的分隔符。

如果要从自定义分隔符读取输入,则必须使用正在使用的属性设置配置。

对于新的Hadoop API,它是不同的:

 conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", ";");