更改mapreduce的默认分隔符

zzwlnbp8  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(473)

嗨,我是mapreduce的初学者,我想编程wordcount以便它输出k/v对。但问题是我不想使用“tab”作为文件的键值对分隔符。我怎样才能改变它?
我使用的代码与示例代码略有不同。这是驱动程序类。

Configuration conf = new Configuration();
    Job job = Job.getInstance(conf, "Job1");
    job.setJarByClass(Simpletask.class);
    job.setMapperClass(TokenizerMapper.class);
    //job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(IntWritable.class);
    job.setOutputValueClass(Text.class);
    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
    LazyOutputFormat.setOutputFormatClass(job, TextOutputFormat.class);

由于我希望文件名与reducer的分区相对应,所以在reduce函数中使用multipleout.write(),因此代码略有不同。

public void reduce(IntWritable key,Iterable<Text> values, Context context) throws IOException, InterruptedException {
    String accu = "";
    for (Text val : values) {
        String[] entry=val.toString().split(",");
        String MBR = entry[1];
        //ASSUME MBR IS ENTRY 1. IT CAN BE REPLACED BY INVOKING FUNCTION TO CALCULATE MBR([COORDINATES])
        String mes_line = entry[0]+",MBR"+MBR+" ";
        result.set(mes_line);
        mos.write(key, result, generateFileName(key));
    }

任何帮助都将不胜感激!谢谢您!

1sbrub3j

1sbrub3j1#

因为您使用的是fileinputformat,所以键是文件中的行偏移量,值是输入文件中的一行。由Map程序使用任何分隔符分割输入行。您可以使用它来拆分记录读入Map方法。默认行为带有一种特定的输入格式,如textinputformat等。

相关问题