2013-04-08 89 views
0

我知道與Key相關的所有值都發送給一個Reducer。減速器是否可以通過標準輸入一次獲得多個鍵?Reducer通過sys.stdin獲取多個密鑰?

我的用例是我將行分解爲鍵值對,然後我想將與鍵關聯的所有行發送到API。我看到,雖然多個密鑰一次發送到API中。

這裏是我的工作運行

映射

def main(): 
    for line in sys.stdin 
     part1 = get_part1(line) 
     part2 = get_part2(line) 
     key = '%s - %s' % (part1, part2) 
     print '%s\t%s' % (key, line) 

減速

def main(): 
    my_module.sent_to_api(sys.stdin) 
+0

我推測你正在使用多個reducer,它們可以跨多個機器/核心同時運行,所以我認爲完全有可能將多個密鑰從各個reducer發送到API。 – Quetzalcoatl 2013-04-08 14:34:53

+0

實際上,發生的事情是每個reducer都意味着將整個sys.stdin文件發送到API。當我通過API打開這個文件時,它包含多個鍵。將兩個reducer插入到一個文件中是不可能的,所以我只能假定一個reducer已經將多個鍵放入了它的sys.stdin – Shane 2013-04-08 14:39:21

+0

請記住,雖然所有與單個鍵相關的值都會發送到一個減速器,減速器可能不僅僅是一個關鍵。這會解釋你所看到的情況嗎? (請注意,如果使用默認分區程序以外的任何其他分區,可能不一定是這種情況。) – Quetzalcoatl 2013-04-08 14:45:22

回答

2

雖然與單個鍵相關聯的所有值都發送到單個減速一些示例代碼,即減速器可能不僅僅是那一個鍵,因此在每個輸出文件中出現多個鍵。

+0

每個減速器過程有一個設置是否有一個鍵? – Shane 2013-04-08 15:20:15

+0

可能有,但是可能更好的做法是重寫你寫出來的API,因爲它似乎沒有特別的hadoop-ish以這種方式限制你的reducer。恐怕我個人並不知道自己的頭腦,但是無論如何去尋找是否有人問過這樣的問題,如果沒有,就自問一個單獨的問題。 – Quetzalcoatl 2013-04-08 15:25:34