2013-08-24 65 views
1

我正在維護一個簡單的hadoop作業,它將生成CSV文件作爲HDFS中的輸出。該作業使用TextOutputFormat。 我想將首行標題行添加到csv文件中(我知道部分文件是由不同的工作人員創建的,如果每個人都獲取標題,這不是問題)。 如何做到這一點?Hadoop TextOutputFormat:將標題添加到CSV輸出

編輯:層疊可以help但乍一看我不想開始使用新的框架

編輯:

所以我想添加標題爲輸出CSV文件。列數 是確定性的。 這裏是我的減速器類的骨架:

import java.io.IOException; 

import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapreduce.Reducer; 
import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs; 

public final class Reducer extends Reducer<Text, IntWritable, Text, IntWritable> 
{ 
    private MultipleOutputs<Text, IntWritable> mos; 

    private static final Text KEY_HOLDER = new Text(); 

    private static final IntWritable VALUE_HOLDER = new IntWritable(1); 

    @Override 
    public void setup(final Context context) 
    { 
     mos = new MultipleOutputs<Text, IntWritable>(context); 
    } 

    @Override 
    public void cleanup(final Context context) throws IOException, InterruptedException 
    { 
     mos.close(); 
    } 

    @Override 
    public void reduce(final Text key, final Iterable<IntWritable> values, final Context context) 
      throws IOException, InterruptedException 
    { 
     // [... some business logic ...]   
     mos.write(KEY_HOLDER, VALUE_HOLDER, "myFileName"); 
     context.progress(); 
    } 
} 
+0

爲什麼downvote?如果問題沒有意義,請告訴我。 – gyorgyabraham

+0

您可以在您的映射器或縮減器中添加標題嗎?您可以在真實數據之前輸出標題。 – zsxwing

+0

請顯示一些代碼,從您的描述我們無法幫助你。 –

回答

0

您可以覆蓋映射/減速類的run()用於添加標題,按您的requirement.For例。如果你想在你最後的o/p中添加FisrtName和LastName。你可以使用下面的代碼作爲參考。

public void run(Context context) throws IOException, InterruptedException 
    { 
     setup(context); 
     column = new Text("ColumnName") ; 
     values = new Text("FirstName" + "\t" + "LastName") ; 
     context.write(column, values); 
     try 
     { 
      while (context.nextKey()) 
      { 
      reduce(context.getCurrentKey(), context.getValues(), context); 
      Iterator<IntWritable> iter = context.getValues().iterator(); 
      if(iter instanceof ReduceContext.ValueIterator) 
      {    ((ReduceContext.ValueIterator<IntWritable>)iter).resetBackupStore();   
      } 
      } 
     } 
     finally 
     { 
      cleanup(context); 
     } 
    } 
相關問題