Hadoop 映射减少输入格式
我是hadoop的新手。并希望像这样向mapper输入int: 1234///678 3 3 2 1///5 9 0 =====////////----- 键值 第一个第四个键,第二个第三个值? 您能帮我在mapper类中用java编写它吗Hadoop 映射减少输入格式,hadoop,mapreduce,Hadoop,Mapreduce,我是hadoop的新手。并希望像这样向mapper输入int: 1234///678 3 3 2 1///5 9 0 =====////////----- 键值 第一个第四个键,第二个第三个值? 您能帮我在mapper类中用java编写它吗 我不想从文件中读取它。我不知道“不想从文件中读取”是什么意思。我认为您需要做的是从文件中读取每一行,并将每一行按“//”拆分 public static class MapClass extends MapReduceBase implements
我不想从文件中读取它。我不知道“不想从文件中读取”是什么意思。我认为您需要做的是从文件中读取每一行,并将每一行按“//”拆分
public static class MapClass extends MapReduceBase implements
Mapper<LongWritable, Text, Text, Text> {
private Text word = new Text();
public void map(LongWritable key, Text value,
OutputCollector<Text, Text> output, Reporter reporter)
throws IOException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line, "//////",
false);
word.set("key:"+tokenizer.nextToken());
output.collect(word, new Text("value="+tokenizer.nextToken()));
}
}
公共静态类MapClass扩展MapReduceBase实现
制图员{
私有文本字=新文本();
公共无效映射(可长写键、文本值、,
OutputCollector输出,报告器(报告器)
抛出IOException{
字符串行=value.toString();
StringTokenizer tokenizer=新的StringTokenizer(第“//”行),
假);
set(“key:+tokenizer.nextToken());
collect(word,新文本(“value=“+tokenizer.nextToken()));
}
}
如果需要,可以将键从映射器之前的值中分割出来,我认为这是一种更简单的方法来完成您要做的事情。它可以通过使用KeyValueTextInputFormat作为输入类来完成。这正是你所需要的;它允许您选择分隔符/分隔符,将键与传递给映射器的值分隔开。您可以通过执行以下操作进行设置:
job.setInputFormatClass(KeyValueTextInputFormat.class)代码>
然后,您可以通过键入以下内容来选择分隔符:
Configuration conf=new Configuration();
conf.set(“mapreduce.input.keyvaluelinerecordreader.key.value.separator”、“//”代码>
然后,当它到达您的映射器时,它已经被拆分。thnx很大程度上vinnie意味着从mapreduce Code读取我的输入数据亲爱的Eric当我要使用此配置时告诉我:方法setInputFormatClass(类