在新的API (apache.hadoop.mapreduce.KeyValueTextInputFormat)中,如何指定除制表符(默认)以外的分隔符(delimiter)来分隔键和值
示例输入:
50000年106298345 | Surender,拉贾,CTS,钦奈
60000年106297845 | Murali,巴拉,TCS,钦奈
50000年106291271 | Rajagopal,拉维,CTS,钦奈
70000年106298616 | Vikram,达玛,TCS,钦奈
106299100 | Kumar Selvam TCS, 90000年,钦奈
10000年106299288 | Sandeep,克里希纳,CTS,钦奈
20000年106290071 |维姆皮拉伊,TCS,钦奈
我指定KeyValueTextInputFormat为:
Configuration conf = new Configuration();
conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", "|");
Job myhadoopJob = new Job(conf);
我的mapper代码在
下面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中的所有输出。我的映射器类没有按照映射方法中的逻辑过滤输入。
有人能帮帮我吗
请在驱动程序代码中尝试以下选项。
conf.set("key.value.separator.in.input.line", "|");