我正在使用KeyValueTextInputFormat来读取/处理逗号分隔的文件:



但是我得到了键中的所有值,即使将分隔符指定为逗号(,),值字段也将变为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);

最佳答案

对我来说,它工作得很好。在我的mapred代码之一中,我只是更改了以下内容,并且有效:

  • 将InputFormatClass更改为使用KeyValueTextInputFormat
  • 添加了配置-conf.set("key.value.separator.in.input.line", ",");
  • 确保在映射器中的外观类似于Mapper<Text,Text,K,V>,这会使map()方法的签名像这样:



  • 不需要其他更改,您必须获取第一列的数据作为键,第二列的数据作为值。

    我想您可能唯一想念的是第3点。

    关于configuration - KeyValueTextInputFormat逗号分隔符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14992627/

    10-16 02:58