使用mapreduce程序比较CSV文件中的数据

时间:2014-07-18 18:57:05

标签: csv hadoop mapreduce hadoop-streaming

我正在尝试使用mapreduce程序比较两个csv文件的列

输入csv数据文件(地图程序的输入)包含一些自动生成的数据,这些数据包含大约100列和数千行,以下列格式显示...

注意:CSV文件列由";"

分隔

输入文件1数据
列1 列2 栏3​​ Column4 ; ----------- Sigma48_12mar09.9010.9010.3; K.TAFQEALDAAGDKLVVVDFSATWC [160.14] GPC [160.14] K.M; P08263.3; 1.062 Sigma48_12mar09.9063.9063.3; K.KDPEGLFLQDNIVAEFSVDETGQMSATAK.G; P08263.3; 1.062

输入文件2数据
列1 列2 栏3​​ Column4 ; ----------- Sigma48_12mar09.9188.9188.2; R.YKLSLEFPSGYPYNAPTVK.F; P08263.3; 1.062 Sigma48_12mar09.9314.9314.2; R.YKLSLEFPSGYPYNAPTVK.FP08263.3; 1.062 Sigma48_12mar09.9010.9010.3; K.TAFQEALDAAGDKLVVVDFSATWC [160.14] GPC [160.14] K.M; P08263.3; 1.062

我的要求:

读取输入文件1 Data.csv 中的所有行 column1 并读取输入文件2 Data.csv 中的所有行,然后比较第一个文件中的column1,第二个文件中的column1。

当找到匹配时,将上述两个文件中的所有其他列与特定进行比较,并将匹配的数据写入HDFS,并返回这两个输入文件中匹配的%。

Mycode如下..

/* First Mapper */
public void map(LongWritable key,Text value,Context context) 
            throws IOException, InterruptedException{

        String line = value.toString();
        String[] words = line.split(";");
        String name = words[1];
        String other = words[2];
        context.write(new Text(name), new Text(line));

    }
}

  /* Second Mapper */

public static class InputMapper2 extends Mapper<LongWritable,Text,Text,Text>{

    public void map(LongWritable key, Text value, Context context)
              throws IOException, InterruptedException
              {
        String line = value.toString();

        String[] words = line.split(";");
        String name = words[1];
        String other = words[2];
        System.out.println(key);
        context.write(new Text(name), new Text(line));


              }

              }

  /* Reducer for both of the mappers */
  /*incomplete and have to compare the two csv files here */

public static class CounterReducer extends Reducer
 {
  String line=null;

  public void reduce(Text key, Iterable<Text> values, Context context ) 
  throws IOException, InterruptedException
  {

    Iterator<Text> val = values.iterator();



   for(Text value:values)
   {
    line = value.toString();
   }

   context.write(key, new Text(line));
 }
}

0 个答案:

没有答案