如何将参数发送到 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()
问题已解决!
我正在尝试弄清楚如何使用 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()
问题已解决!