第八章Mapreduce特性

2021-06-18 02:31:07 字數 1626 閱讀 2153

mapreduce框架在記錄到達

reducers

之前,對記錄按照

key進行排序。對於任何部分

key,值都是未排序的。值出現的順序,甚至都不是穩定的從乙個到另乙個,因為,這些值來自不同的

map tasks

,這些tasks

可能在不同的時間結束。通常來說,大多數

mapreduce

程式的編寫不依靠值在

reduce

函式出現的順序。但是,通過,以特定的方法,分組和排序

key,來利用排好序的

value

,這是可行的。

為了說明這一觀點,請看以下的情況。mapred

程式計算每年溫度的最高值。如果我們把每年的溫度,都降序排列,那麼,我們就不必遍歷這些值來找出最大值了,我們可以拿出每一年的最大值,而忽略掉其它的值。

為了實現這個需求,我們改變keys

為組合數,

year

和temperature

的組合。我們想讓這個組合

key的排序是先按照

year

公升序排列,在按照

temperature

降序排列。

1900 35°c

1900 34°c

1900 34°c

1901 36°c

1901 35°c

如果,我們做的所有事情只是改變key

,那麼,這時還是不能幫助我們,因為,每年的記錄不會走向相同的

reducer

,因為,他們有不同的

keys

。例如,

(1900, 35

°c) and (1900, 34

°c) 

會進入不同的

reducers

。設定乙個

partitioner 

來分組key

的一部分(即

year

),我們可以保證相同年份的記錄會進入相同的

reducer

。這仍然不足以達到我們的目標。

partitioner 

可以確保

reducer

接受每年的所有記錄;但是,他並不改變這樣乙個事實,在分割中,

reducer

是以key

分組的。(譯者注:如下圖)

難題的最後一步是,設定分組的控制。如果,我們在reducer

中根據key

中的year

來分組values

,那麼,我們會發現所有的相同年的記錄會在乙個

reduce

分組中。並且,因為它們是按照

temperature

降序排列的,第乙個值就是最大值。

總結如下,按照value

排序的菜譜如下:

1、把原來的

key和

value

組合成新的

key。 2、

key比較器應該按照組合

key來排序,也就是原來的

key和

value。

3、partitioner 

和組合key

的grouping 

比較器,應該只以原來的

key進行分割和分組。

第八章 指標 第八章 指標

1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...

第八章(筆記)

能在 中進行記憶體單元的定址的暫存器只有4個,分別是bx si di bp 其中bx bp 是基址,bx對應的段位址是ds,bp對應的段位址是ss si di 是變址,單獨使用時段位址是ds,組合使用段位址是跟隨組合的基址對應的段位址 中進行記憶體單元定址彙總 si di bx bp 常量 si 常...

第八章 字典

d 空字典 d 這就是字典 d dict.fromkeys a b d dict zip keyslist,valslist d dict name bob age 22 建立字典的函式 d name 通過索引key獲取對應的value d.keys 返回d字典物件所有key,返回乙個列表 d.va...