我有一个mapreduce程序,其输出现在都在文本文件中。该计划的样本如下。 我不明白该怎么做是从序列文件格式的reducer输出键/值对。 不,我不能使用SequeceFileFormat说明符,因为我使用的是hadoop 0.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**
}
}
现在这是运行此程序的主程序(我遗漏了映射器和其他不相关的细节)
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程序中实际执行此操作的示例,这就是我被卡住的原因。
所以我想要的输出是这个程序在序列文件而不是文本文件中写入键/值对
我还想知道如何使用Mapper读取序列文件
非常感谢任何帮助。
答案 0 :(得分:1)
我认为改变输入和输出格式就足够了。一旦正确编码/解码,键/值对应该相同。所以使用:
import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;
&安培;
job.setInputFormatClass(SequenceFileInputFormat.class);
job.setOutputFormatClass(SequenceFileOutputFormat.class);
试一试,因为我有一段时间没有这样做......