如何将参数发送到 Google App Engine 上 mapreduce 中的映射器函数?

How do you send parameters to the mapper function in mapreduce on Google App Engine?

我正在尝试弄清楚如何使用 mapreduce library with the DatastoreInputReader on App Engine. I have had a lot of help from this excellent tutorial: https://sookocheff.com/post/appengine/mapreduce/programmatic-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()

或者我是否必须为此创建自己的输入 reader?

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

from mapreduce import context

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

问题已解决!