java—在hadoop中以序列文件格式写入/读取键/值对

gijlo24d  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(338)

我有一个mapreduce程序,它的输出现在都是文本文件。下面是一个程序示例。我不知道怎么做的是以序列文件格式输出reducer中的键/值对。不,我不能使用sequecefileformat说明符,因为我使用的是Hadoop0.20库
那我该怎么办?下面是一个示例,wordcount程序只是我较大程序的一小部分。如果我知道一个人怎么做,剩下的我也能做。请帮忙。字数缩减器

public void reduce(Text key, Iterable<IntWritable> values, Context context) 
  throws IOException, InterruptedException 
  {
    int sum = 0;
    for (IntWritable val : values) {
        sum += val.get();
    }
    System.out.println("reducer.output: "+key.toString()+" "+sum);

    context.write(key, new IntWritable(sum));**//RIGHT HERE!! OUTPUTS TO TEXT**

}

}
现在是运行这个的主程序(我省略了mapper和其他不相关的细节)

Configuration conf = new Configuration();

Job job = new Job(conf, "Terms");
job.setJarByClass(wordCount.class);

//Outputting key value pairs as a dictionary (rememb python)
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);

//Setting the mapper and reducer classes
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);

//Setting the type of input format. In this case, plain TEXT
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);

我知道如何将文本文件转换成序列文件。我知道如何做相反的事。这不是问题所在。我找不到任何在hadoop程序中真正做到这一点的例子,这就是我陷入困境的原因。
所以我希望这个程序的输出是将键/值对写入序列文件而不是文本文件
我还想知道如何用Map器读取序列文件
任何帮助都将不胜感激。

fcg9iug3

fcg9iug31#

我相信改变输入和输出格式就足够了。一旦编码/解码正确,键/值对应该是相同的。所以使用:

import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;

&

job.setInputFormatClass(SequenceFileInputFormat.class);
job.setOutputFormatClass(SequenceFileOutputFormat.class);

试一试,因为我已经有一段时间没这么做了。。。

相关问题