我在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
答案 0 :(得分:2)
对于DoubleArrayWritable
课程,我假设您正在使用this question中接受的答案中的代码。如果是这种情况,您需要实现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())));
答案 1 :(得分:0)
您也可以尝试:
context.write(new LongWritable(row_id1),new Text(String.valueOf(ad)));
我正在使用它来进行文字转换。