map-reduce输入格式

nafvub8i  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(352)

**结束。**此问题不符合堆栈溢出准则。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

7年前关门了。
改进这个问题
我对hadoop非常陌生。想要像这样输入int到mapper:
1 2 3 4//////6 7 8
3 3 2 1//////5 9 0
=====////////-----
键///////值
第一个第四个键,下一个3个值?你能帮我在mapper类中用java写吗?
我不想从文件里读它。

eqoofvh9

eqoofvh91#

如果需要,可以将键从Map器之前的值中分离出来,我认为这是一种更简单的方法。它可以通过使用keyvaluetextinputformat作为输入类来完成。这正是你所需要的;它允许您选择分隔符/分隔符,将键与传递给Map器的值分开。您可以通过执行以下操作进行设置: job.setInputFormatClass(KeyValueTextInputFormat.class); 然后您可以通过键入以下内容来选择分隔符: Configuration conf = new Configuration(); conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator","//////"); 当它到达你的Map器,它已经分裂。

watbbzwu

watbbzwu2#

我不知道“不想从文件中读取”是什么意思。我认为您需要做的是读取文件中的每一行,并将每一行按“/////”拆分。

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()));
    }
}

相关问题