0

Я пытаюсь выяснить, как использовать mapreduce library с DatastoreInputReader в App Engine. У меня была большая помощь в этом отличном учебнике: https://sookocheff.com/post/appengine/mapreduce/programmatic-mapreduce/Как вы отправляете параметры функции сопоставления в mapreduce в Google App Engine?

Но есть одна вещь, которую я не могу найти ни одного примера - как вы отправляете настраиваемые параметры в функцию 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

Это, похоже, охвачено в учебнике, к которому вы ссылаетесь, конечно. В трубопроводе есть 'params' dict, который, кажется, именно то, что вы хотите. –

ответ

0

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

from mapreduce import context 

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

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

Смежные вопросы