我试图找出如何使用mapreduce库与DatastoreInputReader上的应用程序引擎。我从这个优秀的教程中得到了很多帮助:https://sookocheff.com/post/appengine/mapreduce/programmatic-mapreduce/
但是有一件事我找不到任何例子-你如何发送自定义参数到mapper函数?看起来它只接收实体。如果我还想访问与工作相关的其他数据,该怎么办?例如,如果我有一款游戏,想要将每个人的分数设置为特定值,我是否可以将其发送到某个地方?或者我必须为我想要使用的每个值创建一个单独的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()
或者我必须为它创建自己的输入阅读器吗?
事实证明这是可能的,但比我想象的要棘手一些。虽然您不能接收方法的参数,但您可以将参数发送到管道,然后通过mapreduce上下文获取它们。
from mapreduce import context
def mapper(user):
user.score = ctx.mapreduce_spec.mapper.params['new_score']
user.put()
问题解决了!