Map 数组输出值问题(HADOOP)

Map 数组输出值问题(HADOOP),map,hadoop,mapreduce,Map,Hadoop,Mapreduce,我的映射程序代码中有这个,其中“a”是一个可双写数组 DoubleArrayWritable ad = new DoubleArrayWritable(); ad.set(a); int row_id1=(int)row_id; context.write(new LongWritable(row_id1),new Text(ad.toString())); 我只是把这些输入作为减速机的输出打印到减速机上,我把它作为减速机的输出 1 DoubleArrayWritable@e29820 2

我的映射程序代码中有这个,其中“a”是一个可双写数组

DoubleArrayWritable ad = new DoubleArrayWritable();
ad.set(a);
int row_id1=(int)row_id;
context.write(new LongWritable(row_id1),new Text(ad.toString()));
我只是把这些输入作为减速机的输出打印到减速机上,我把它作为减速机的输出

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  

对于
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())));
您也可以尝试:

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

我用它来进行字符串到文本的转换。

谢谢,我喜欢这个。。。现在,你能告诉我如何从一个单独的文件中获取一些先前的数据,我可以用它来处理我在reducer中的输入数据。就像我在一个或多个文件中存储了一些和,现在我想将我从reducer中的mapper获得的每个输入除以该和。(我是HADOOP新手,请尝试相应地回答)。