2013-02-21 203 views
0

我使用KeyValueTextInputFormat用於讀取/處理逗號分隔的文件:KeyValueTextInputFormat逗號分隔符

100,56
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); 
+1

的可能重複[如何指定KeyValueTextInputFormat分離器在Hadoop的0.20 API?](http://stackoverflow.com/questions/9211151/how-to-specified-keyvaluetextinputformat-separator-in-hadoop-20-api) – 2013-02-21 01:07:03

+0

@ChrisGerken - 不重複,這裏的問題是值字段將作爲null – CassandraCurious 2013-02-21 01:11:12

回答

0

它對我來說工作得很好。在我mapred一個代碼,我只是改變了以下和它的工作:

  1. 改變了InputFormatClass使用KeyValueTextInputFormat
  2. 新增的配置 - conf.set("key.value.separator.in.input.line", ",");
  3. 在映射確信比卻一臉的東西像Mapper<Text,Text,K,V>,這將使地圖()方法的簽名是這樣的:

公共無效地圖(文本鍵,文本值,OutputCollector輸出,記者記者) 拋出IOException異常{}

沒有其他的變化是必要的,你必須把第一列的數據作爲關鍵和第二列

我猜你可能會錯過的唯一事情就是點3