keyvaluetextinputformat逗号分隔符

5tmbdcev  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(458)

我正在使用keyvaluetextinputformat读取/处理逗号分隔的文件:
100,56
89,586
123,68
然而,我得到键中的所有值,值字段将变为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);
f1tvaqid

f1tvaqid1#

它对我来说很好用。在我的一个Map代码中,我只是更改了以下内容,它就起作用了:
已将inputformatclass更改为使用 KeyValueTextInputFormat 添加了配置- conf.set("key.value.separator.in.input.line", ","); 确保比在Map上有一个类似的东西看 Mapper<Text,Text,K,V> ,这将使map()方法的签名如下所示:
public voidMap(text key,text value,outputcollector output,reporter reporter)抛出ioexception{}
不需要其他更改,必须将第一列的数据作为键,将第二列作为值。
我想你唯一可能错过的就是第三点。

相关问题