在新的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方法中的逻辑过滤输入。
有人可以帮助我
答案 0 :(得分:1)
请在驱动程序代码中尝试以下选项。
conf.set("key.value.separator.in.input.line", "|");