我是hadoop的新手。并希望将这样的输入 int 映射到映射器:
1 2 3 4//////6 7 8
3 3 2 1//////5 9 0
=====////////-----
核心价值
键中的第一个第四个和值中的下一个 3 个数字?你能帮我在映射器类中用java编写它吗?
我不想从文件中读取它。
我不确定“不想从文件中读取它”是什么意思。我认为您需要做的是从文件中读取每一行并用'//////'分割每一行。
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()));
}
}
如果你愿意,你可以从映射器之前的值中拆分键,我认为这是一种更简单的方法来做你想做的事情。它可以通过使用 KeyValueTextInputFormat 作为您的输入类来完成。这正是您需要的;它允许您选择将键与传递给映射器的值分开的分隔符/分隔符。您可以通过以下方式设置它:
job.setInputFormatClass(KeyValueTextInputFormat.class);
然后,您可以通过键入以下内容来选择分隔符:
Configuration conf = new Configuration();
conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator","//////");
然后,当它到达您的映射器时,它已经分裂了。