2016-11-17 23 views
1

其實我試圖實現一個機器學習算法,它要求我在文件中寫入reducer的輸出,然後在下一個映射器中讀取這個文件。問題是我正在編寫文件中的減速器中創建的MapWritable對象,但現在當我想訪問該對象時,它僅作爲字符串來使用。有什麼辦法將這個對象[email protected]轉換成實際的MapWritable對象從文件讀取?我的代碼映射轉換映射器內的對象中的串化的MapWritable

部分:

DoubleWritable[][] Tdata = new DoubleWritable[T.numRows()][T.numColumns()]; 
for (int k = 0; k < Tdata.length; k++) { 
    for (int j = 0; j < Tdata[k].length; j++) { 
     Tdata[k][j] = new DoubleWritable(T.get(k, j)); 
    } 
} 
DoubleArrayWritable t = new DoubleArrayWritable(); 
t.set(Tdata); 

DoubleWritable[][] Hdata = new DoubleWritable[H.numRows()][H.numColumns()]; 
for (int k = 0; k < Hdata.length; k++) { 
    for (int j = 0; j < Hdata[k].length; j++) { 
     Hdata[k][j] = new DoubleWritable(H.get(k, j)); 
    } 
} 
DoubleArrayWritable h = new DoubleArrayWritable(); 
h.set(Hdata); 

mw.put(new IntWritable(0), h); 
mw.put(new IntWritable(1), t); 
context.write(new Text(splitId), mw); 

在JavaScript中,我們使用eval這樣的事情有沒有這樣的快捷方式嗎?

回答

0

您可能正在使用TextOutputFormat向您寫入數據,這是默認設置,或者您可能已經設置了它。

要正確獲取實際物體,您應該使用SequenceFileOutputFormat編寫輸出,並在下一份作業中使用SequenceFileInputFormat讀入。

job.setInputFormat(SequenceFileInputFormat.class); 
job.setOutputFormat(SequenceFileOutputFormat.class); 

在您需要設置來電對象以匹配前面的減速機的輸出類型接收映射:

您可以使用喜歡的東西設置的輸入/輸出格式。

+0

其實我是第一次嘗試這個,但因爲使用舊API,我得到錯誤。但現在全部清理完畢。謝謝btw – Mohini