我正在尝试使用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));
}
}