Как отправить параметры функции mapper в mapreduce на Google App Engine?

Я пытаюсь выяснить, как использовать библиотеку mapreduce с DatastoreInputReader на App Engine. У меня было много помощи от этого превосходного учебника: 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()

Или я должен создать свой собственный читатель ввода для этого?

1 ответ

  1. Оказывается, это было возможно, но немного сложнее, чем я думал. Хотя вы не можете получить параметры в метод, вы можете отправить параметры в конвейер, а затем получить их через контекст mapreduce.

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

    Проблема решена!