如何将Hadoop Reducer的最终输出写入文本文件?

sara_123

我是Hadoop的新手。我试图修改WordCount示例以执行以下任务(将键设置为第二个元素,将第四和第五个元素设置为该键的相应值,然后根据键值将它们分组在一起并编写最终的结果转换为文本文件):

Input.txt :
a:b:c:d:e:f
g:h:i:j:k:l
m:b:n:o:p:q

Output.txt :
b:d:o:e:p
h:j:k

这是我的代码:

public class Test {

    public static class Map 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 [] temp = value.toString().split(":");
                String remainder = temp[3] + ":" +temp[4];
                output.collect(new Text(temp[1]), new Text(remainder));
            }
        }


    public static class Reduce extends MapReduceBase implements
            Reducer<Text, Text, Text, Text> {
        public void reduce(Text key, Iterator<Text> values,
                OutputCollector<Text, Text> output, Reporter reporter)
                throws IOException {

            String temp ="";
            while (values.hasNext()) {
                temp = temp + values.next().toString();     

            }

            //String remainder = ":" +temp;
            output.collect(key,new Text(temp));// point
            // :
            // distance
        }
    }

    public static void main(String[] args) throws Exception {
        JobConf conf = new JobConf(Test.class);
        conf.setJobName("pivotpoints");

        System.out.println(conf.getNumMapTasks() + "map runs");

        conf.setOutputKeyClass(Text.class);
        conf.setOutputValueClass(Text.class);

        conf.setMapperClass(Map.class);
        conf.setCombinerClass(Reduce.class);
        conf.setReducerClass(Reduce.class);

        conf.setInputFormat(TextInputFormat.class);
        conf.setOutputFormat(TextOutputFormat.class);

        FileInputFormat.setInputPaths(conf, new Path(args[0]));
        FileOutputFormat.setOutputPath(conf, new Path(args[1]));

        JobClient.runJob(conf); 
    }   
}

这是我从上面的代码中得到的输出:

part-00000 :
b d:eo:p
h j:k

因此,我的问题是:如何使Hadoop使用特殊的分隔符号以给定的格式将最终输出写入文本文件?

阿伦·阿克

在主类的配置中设置属性mapreduce.output.textoutputformat.separator。

conf.set("mapreduce.output.textoutputformat.separator",":");

映射以发出以下序列,

key value 
b d
b e
h j
h k
b o
b p

Reducer会自动将其分组为

b [d, e, o, p]
h [j, k]

您可以遍历化简器中每个键的值列表,然后将:放在这些值之间,将它们连接为单个字符串。

还原剂然后可以散发

Key Value 
b d:e:o:p (your concatenated string)
h j:k (your concatenated string)

由于您已将分隔符设置为:而不是tab输出文件,因此将得到预期的结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将Hadoop Reducer的最终输出写入文本文件?

来自分类Dev

如何将 WebSocket 输出写入文本文件?

来自分类Dev

将命令行输出写入文本文件

来自分类Dev

将终端的动态输出写入文本文件

来自分类Dev

无法将输出写入JAVA中的文本文件

来自分类Dev

将Nokogiri输出写入文本文件

来自分类Dev

修复将cUrl输出写入文本文件的权限

来自分类Dev

将打印功能的输出写入文本文件

来自分类Dev

将str()的输出写入文本文件吗?

来自分类Dev

将终端的动态输出写入文本文件

来自分类Dev

连续将终端输出写入文本文件

来自分类Dev

修复将cUrl输出写入文本文件的权限

来自分类Dev

如何将“ java -version”的输出写入文本文件?

来自分类Dev

如何将ArrayList写入文本文件?

来自分类Dev

如何将字典表写入文本文件?

来自分类Dev

如何将结果写入文本文件?

来自分类Dev

如何将点对象写入文本文件

来自分类Dev

如何将窗口输出到文本文件?

来自分类Dev

如何将输出更改为文本文件?

来自分类Dev

Python-Beautifulsoup-仅将最终刮取链接中的数据输出到文本文件

来自分类Dev

将列表写入文本文件

来自分类Dev

将结构写入文本文件

来自分类Dev

将列写入文本文件

来自分类Dev

将交易写入文本文件

来自分类Dev

将系列写入文本文件

来自分类Dev

将Hadoop输出导出到文本文件

来自分类Dev

将Hadoop输出导出到文本文件

来自分类Dev

如何仅将新文本写入文本文件

来自分类Dev

将列表(在R控制台输出中看到)写入文本文件