-1

我是hadoop的新手。并希望将这样的输入 int 映射到映射器:

1 2 3 4//////6 7 8

3 3 2 1//////5 9 0

=====////////-----

核心价值

键中的第一个第四个和值中的下一个 3 个数字?你能帮我在映射器类中用java编写它吗?

我不想从文件中读取它。

4

2 回答 2

0

我不确定“不想从文件中读取它”是什么意思。我认为您需要做的是从文件中读取每一行并用'//////'分割每一行。

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()));
    }
}
于 2013-08-14T13:23:47.810 回答
0

如果你愿意,你可以从映射器之前的值中拆分键,我认为这是一种更简单的方法来做你想做的事情。它可以通过使用 KeyValueTextInputFormat 作为您的输入类来完成。这正是您需要的;它允许您选择将键与传递给映射器的值分开的分隔符/分隔符。您可以通过以下方式设置它:

job.setInputFormatClass(KeyValueTextInputFormat.class);

然后,您可以通过键入以下内容来选择分隔符:

Configuration conf = new Configuration(); conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator","//////");

然后,当它到达您的映射器时,它已经分裂了。

于 2013-08-14T14:42:35.980 回答