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...