Java 如何构建buildOutputValue方法
请,我需要有关此代码的帮助:Java 如何构建buildOutputValue方法,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,请,我需要有关此代码的帮助: public class ThirdQueryReducer extends Reducer<IntWritable, Text, NullWritable, Text> { private NullWritable nullWritableKey = NullWritable.get(); private Text outputValue = new Text(); private StringBuilder buildOutputValu
public class ThirdQueryReducer extends
Reducer<IntWritable, Text, NullWritable, Text> {
private NullWritable nullWritableKey = NullWritable.get();
private Text outputValue = new Text();
private StringBuilder buildOutputValue(IntWritable key,
StringBuilder reduceValueBuilder, Text value) {
}
@Override
public void reduce(IntWritable key, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
}}
公共类ThirdQueryReducer扩展
减速器{
私有NullWritable nullWritableKey=NullWritable.get();
私有文本输出值=新文本();
私有StringBuilder buildOutputValue(可写入密钥,
StringBuilder还原值生成器,文本值){
}
@凌驾
公共void reduce(可写键、可写值、上下文)
抛出IOException、InterruptedException{
}}
我如何实现buildOutputValue?知道mapper中的输出是这样的:mapDriver.withOutput(newintwritable(1981),newtext(“Mercurey”)代码>
buildOutputValue()必须处理如下日期:
List values=new ArrayList();
添加(新文本(“Pommard”);
添加(新文本(“Gentil”);
带输入的简化驱动程序(新的IntWritable(1980),值)代码>
减速器的输出如下:
reduceDriver.withOutput(NullWritable.get(),新文本(“Pommard\nGentil”)代码>
提前感谢您可以按如下方式实施:
公共类ThirdQueryReducer扩展
减速器{
private NullWritable nullWritableKey = NullWritable.get();
private Text outputValue = new Text();
private StringBuilder buildOutputValue(IntWritable key,
StringBuilder reduceValueBuilder, Text value) {
return reduceValueBuilder.append(value);
}
@Override
public void reduce(IntWritable key, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
Iterator<Text> valueIter = values.iterator();
StringBuilder reduceValueBuilder = new StringBuilder();
while (valueIter.hasNext()) {
buildOutputValue(key, valueIter.next(), reduceValueBuilder);
if (valueIter.hasNext()) {
reduceValueBuilder.append("\n");
}
}
context.write(NullWritable.get(), new Text(reduceValueBuilder.toString()));
}
private nullwriteable nullwriteablekey=nullwriteable.get();
私有文本输出值=新文本();
私有StringBuilder buildOutputValue(可写入密钥,
StringBuilder还原值生成器,文本值){
返回reduceValueBuilder.append(值);
}
@凌驾
公共void reduce(可写键、可写值、上下文)
抛出IOException、InterruptedException{
迭代器valueIter=values.Iterator();
StringBuilder reduceValueBuilder=新StringBuilder();
while(valueIter.hasNext()){
buildOutputValue(key,valueIter.next(),reduceValueBuilder);
if(valueIter.hasNext()){
reduceValueBuilder.append(“\n”);
}
}
write(nullwriteable.get(),新文本(reduceValueBuilder.toString());
}
}谢谢,这是一个很好的选择!