2013-04-27 82 views
2

我有這在我的映射器的代碼,其中「a」是一個DoubleWritable陣列。問題與陣列輸出值(HADOOP)

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

而我會只打印這些輸入到減速機爲減速機的輸出而我會得到這個從減速機的輸出,

1 [email protected] 
2 [email protected] 
3 [email protected] 
4 [email protected] 

我失去了什麼?我想輸出

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

回答

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()))); 
+0

感謝我做了這樣的...現在可以ü請告訴我如何從一個單獨的文件,我可以使用reducer.like來處理我的輸入數據,我都存儲在一個或多個文件中的一些和一些現有的數據現在我想每個輸入IM由總和從映射器在獲得減速分裂。 (我是HADOOP的新手,請儘量相應回答)。 – Divyendra 2013-04-27 12:45:00

0

你也可以試試:

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

我使用的字符串到文本的轉換。