在新的API(apache.hadoop.mapreduce.KeyValueTextInputFormat)中,如何指定制表符(默认值)以外的分隔符(定界符)来分隔键和值。
样本输入:
106298345 | Surender,Raja,CTS,50000,Chennai
106297845 | Murali,Bala,TCS,60000,Chennai
106291271 | Rajagopal,Ravi,CTS,50000,Chennai
106298616 |维克拉姆,达玛,TCS,70000,钦奈
106299100 |库马尔,塞尔瓦姆,TCS,90000,钦奈
106299288 | Sandeep,Krishna,CTS,10000,Chennai
106290071 | Vimal,Pillai,TCS,20000,Chennai
我将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)); }
}
但是我的映射器类正在打印输入文件中的所有输出。我的映射器类未按照映射方法中的逻辑过滤输入。
有人能帮我吗
最佳答案
请尝试在驱动程序代码中使用以下选项。conf.set("key.value.separator.in.input.line", "|");