Taiwan Hadoop Forum http://forum.hadoop.tw/ |
|
map後恢復正確排序的問題 http://forum.hadoop.tw/viewtopic.php?f=7&t=38338 |
第 1 頁 (共 1 頁) |
發表人: | zxc940907 [ 2016-10-24, 00:47 ] |
文章主題 : | map後恢復正確排序的問題 |
大大您好, 小弟近日練習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 |
發表人: | jazz [ 2016-11-03, 12:15 ] |
文章主題 : | Re: map後恢復正確排序的問題 |
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 |
發表人: | jazz [ 2016-11-03, 12:17 ] |
文章主題 : | Re: map後恢復正確排序的問題 |
zxc940907 寫: 大大您好, 小弟近日練習mapreduce函式,以矩陣向量作內積練習(僅用map function)。 由於「僅用 map function」,因此在分散運算的狀態下,只能將回傳值再自行做一次 sort Example: 代碼: sort(matrix(1:4,ncol=2)%*%c(1:2)) 若輸出太大,無法單機做 sort,那只好使用 identity function ( A -> A ) 當 reduce function,然後調整 reducer 個數,產生區域排序的結果。 - Jazz |
發表人: | zxc940907 [ 2016-12-06, 14:17 ] |
文章主題 : | Re: map後恢復正確排序的問題 |
引言回覆: 請問這個是 Python 語法?還是 R ?感覺有點像 R 的語法~ 由於看不太懂,所以只能從觀念上先釐清。 MapReduce 採用的是 Share Nothing 的 Programming Model 所以無法確保輸入被運算的順序,如果有 Reduce 的話, 理論上在 Hadoop 實作的 MapReduec 中間是有 sort by key 的動作。 輸出會依據 key 的順序排序。 (如果您使用的是 RMR (RHadoop 的 MapReduce)的話,就會依照 Key 的順序輸出) 是的大大,是用RHadoop沒錯。 我有了解大大的意思了。 只是想再深入問一下, 若一個矩陣在讀入時會被打亂, 那勢必我們需要在讀入前,先為矩陣增添一欄c(1:nrow(matrix))的序列, 並在map階段取出做為key,如此一來,經由reduce階段後,才能輸出正常排序。 但新增一欄的動作,豈不是又會造成原來的數據大小再膨脹嗎? 還是說,有不增加序列,卻可以在"無法確保輸入被運算的順序"下,給出正確排序的方法? 另外,想請問大大, 使用RMR2,有方法針對不同的map tasks & reduce tasks進行不同的資料處理操作嗎? 例如: map task1將matrix*2; map task2將matrix*3 這樣的差異操作。 非常感謝大大 |
第 1 頁 (共 1 頁) | 所有顯示的時間為 UTC + 8 小時 |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |