2016-10-05 70 views
0

我想弄清楚如何在App Engine上使用mapreduce library和DatastoreInputReader。我從這個優秀的教程中獲得了很多幫助:https://sookocheff.com/post/appengine/mapreduce/programmatic-mapreduce/如何將參數發送到Google App Engine上的mapreduce中的映射函數?

但有一件事我找不到任何示例 - 如何將自定義參數發送給映射函數?它似乎只接收實體。如果我還想訪問與工作相關的其他數據,該怎麼辦?例如,如果我有一款遊戲並希望將每個人的分數設置爲特定值,我可以在某處發送該分數嗎?或者我必須爲每個我想要使用的值創建一個單獨的映射函數,像這樣?

def mapper_10(user): 
    user.score = 10 
    user.put() 

def mapper_50(user): 
    user.score = 50 
    user.put() 

顯然這看起來很愚蠢。有沒有辦法做這樣的事情?

def mapper(user, new_score): 
    user.score = new_score 
    user.put() 

或者我必須爲此創建自己的輸入閱讀器嗎?

+0

這似乎在您鏈接到的教程中肯定會介紹。管道中有一個「params」字典,它似乎正是你想要的。 –

回答

0

原來,這是可能的,但比我想象的更棘手。雖然無法接收方法的參數,但可以將參數發送到管道,然後通過mapreduce上下文獲取它們。

from mapreduce import context 

def mapper(user): 
    user.score = ctx.mapreduce_spec.mapper.params['new_score'] 
    user.put() 

問題解決!

相關問題