如何在Google App Engine上的mapreduce中向mapper函数发送参数?

时间:2016-10-05 10:39:16

标签: google-app-engine mapreduce google-app-engine-python

我正在尝试弄清楚如何在App Engine上使用mapreduce library和DatastoreInputReader。我从这个优秀的教程中得到了很多帮助:https://sookocheff.com/post/appengine/mapreduce/programmatic-mapreduce/

但有一件事我找不到任何例子 - 你如何向mapper函数发送自定义参数?它似乎只接收实体。如果我还想访问与该作业相关的其他一些数据,该怎么办?例如,如果我有一个游戏并希望将每个人的分数设置为特定值,我可以在某个地方发送吗?或者我是否必须为我想要使用的每个值创建一个单独的映射器函数,如下所示?

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()

或者我必须为此创建自己的输入阅读器吗?

1 个答案:

答案 0 :(得分:0)

事实证明这是可能的,但比我想象的要复杂一点。虽然您无法接收方法的参数,但您可以将参数发送到管道,然后通过mapreduce上下文获取它们。

from mapreduce import context

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

问题解决了!