0

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

100,56
89,586
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);
4

1 回答 1

0

它对我来说非常好。在我的一个 mapred 代码中,我只是更改了以下内容并且它起作用了:

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

公共无效映射(文本键,文本值,OutputCollector 输出,Reporter 报告器)抛出 IOException {}

不需要其他更改,您必须将第一列的数据作为key并将第二列作为value

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

于 2013-02-21T19:04:57.137 回答