2016-10-05 34 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() 

问题解决!

相关问题