2

我的 Mapper 代码中有这个,其中 'a' 是一个 DoubleWritable 数组。

DoubleArrayWritable ad = new DoubleArrayWritable();
ad.set(a);
int row_id1=(int)row_id;
context.write(new LongWritable(row_id1),new Text(ad.toString()));

我只是将这些输入打印到reducer作为reducer的输出,我将它作为reducer的输出,

1   DoubleArrayWritable@e29820
2   DoubleArrayWritable@718242
3   DoubleArrayWritable@1ec58a
4   DoubleArrayWritable@3afb99

我错过了什么?我想输出为

 1  2 3 4 7
 2  4 6 5 9
 3  4 5 7 3  
4

2 回答 2

2

对于这DoubleArrayWritable门课,我假设您正在使用此问题的已接受答案中的代码。如果是这种情况,您需要实现toString以您想要的格式输出。也许是这样的:

public String toString() {
    if (data.length == 0) {
      return "";
    }

    StringBuilder sb = new StringBuilder();
    for (double d : data) {
        sb.append(d).append(" ");
    }

    //trim the trailing space
    sb.setLength(sb.length - 1);
    return sb.toString();
}

如果你能接受这样的格式:

[1、2、3、4]

您可以跳过该toString方法并改为执行此操作:

context.write(new LongWritable(row_id1),new Text(Arrays.toString(ad.getData())));
于 2013-04-27T12:32:54.987 回答
0

你也可以试试:

context.write(new LongWritable(row_id1),new Text(String.valueOf(ad)));

我将它用于字符串到文本的转换。

于 2013-04-27T18:51:47.800 回答