KeyValueTextInputFormat逗号分隔符

时间:2013-02-21 00:35:57

标签: configuration hadoop

我正在使用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);

1 个答案:

答案 0 :(得分:0)

它对我来说非常好。在我的一个mapred代码中,我刚刚更改了以下内容并且它有效:

  1. 将InputFormatClass更改为使用KeyValueTextInputFormat
  2. 添加了配置 - conf.set("key.value.separator.in.input.line", ",");
  3. 确保在映射器中看起来像Mapper<Text,Text,K,V>,这会使map()方法的签名如下:
  4.   

    public void map(文字键,文字值,OutputCollector输出,Reporter记者)                 抛出IOException {}

    无需进行其他更改,您必须将第一列的数据作为,第二列作为

    我想你唯一可能错过的就是第3点。