我正在尝试弄清楚如何在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()
或者我必须为此创建自己的输入阅读器吗?
答案 0 :(得分:0)
事实证明这是可能的,但比我想象的要复杂一点。虽然您无法接收方法的参数,但您可以将参数发送到管道,然后通过mapreduce上下文获取它们。
from mapreduce import context
def mapper(user):
user.score = ctx.mapreduce_spec.mapper.params['new_score']
user.put()
问题解决了!