数组输出值的Map问题(hadoop)

uurv41yg  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(253)

在我的Map程序代码中有这个,其中“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
xeufq47z

xeufq47z1#

您也可以尝试:

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

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

jecbmhm3

jecbmhm32#

对于 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())));

相关问题