Driver类中的KeyValueTextInputFormat

时间:2014-05-23 06:30:47

标签: java mapreduce

在新的API(apache.hadoop.mapreduce.KeyValueTextInputFormat)中,如何指定除tab之外的分隔符(分隔符)(默认值)以分隔键和值。

示例输入:
    106298345 | Surender,拉贾,CTS,50000,奈
    106297845 |穆拉利,巴拉,TCS,60000,奈
    106291271 | Rajagopal,拉维,CTS,50000,奈
    106298616 |维克拉姆,达玛,TCS,70000,奈
    106299100 |库马尔,Selvam,TCS,90000,奈
    106299288 |桑迪普,克里希纳,CTS,10000,奈
    106290071 | VIMAL,皮莱,TCS,20000,奈

我将KeyValueTextInputFormat指定为:

Configuration conf = new Configuration();
conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", "|");
Job myhadoopJob = new Job(conf);

我的映射器代码位于

之下
import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Mapper.Context;

public class KeyValueMapper extends  Mapper<Text, Text, Text, Text>
{
@Override
protected void map(Text key, Text value, Context context)throws IOException,       InterruptedException {
String mapOutPutValue="";
String line = value.toString();
String[] details=line.split(",");
for(int i=0;i<details.length;i++)
{
if(details[i].equalsIgnoreCase("TCS"))
{
mapOutPutValue=line;
}
}if(mapOutPutValue!="")context.write(key, new Text(mapOutPutValue)); }

}

但我的mapper类正在输入inputfile中的所有输出。我的mapper类没有根据map方法中的逻辑过滤输入。

有人可以帮助我

1 个答案:

答案 0 :(得分:1)

请在驱动程序代码中尝试以下选项。

conf.set("key.value.separator.in.input.line", "|");