zxc940907 寫:
大大您好,
小弟近日練習mapreduce函式,以矩陣向量作內積練習(僅用map function)。
但由於mapreduce屬分散式運算,
input被切割進行運算後,
導致map後的回傳值順序被打亂。想請教有無找回原順序的技巧。
example:
引言回覆:
matrix(1:4,ncol=2)%*%c(1:2)
回傳值順序為7,10,順序正確。
但若分散式運算,反而可能會得到10,7(順序錯誤),
因為mapreduce切割後先將c(2,4)%*%c(1:2)擺在前順位。
*此時,我
是否有任何函式上的方法,或邏輯上的技巧讓回傳值恢復原來的順序呢?感謝大大QQ
引言回覆:
matrix(1:4,ncol=2)%*%c(1:2)
請問這個是 Python 語法?還是 R ?感覺有點像 R 的語法~
由於看不太懂,所以只能從觀念上先釐清。
MapReduce 採用的是 Share Nothing 的 Programming Model
所以無法確保輸入被運算的順序,如果有 Reduce 的話,
理論上在 Hadoop 實作的 MapReduec 中間是有 sort by key 的動作。
輸出會依據 key 的順序排序。
(如果您使用的是 RMR (RHadoop 的 MapReduce)的話,就會依照 Key 的順序輸出)
- Jazz