7

mapreduce ジョブが実行されるたびに (たとえば、ユーザーの要求に応じて) パラメータを map および reduce 関数に渡す必要があるという意味で、動的な mapreduce ジョブを実行する必要があります。

どうすればこれを達成できますか? ドキュメントのどこにも、マップとリデュースの実行時に動的処理を行う方法がありませんでした。

class MatchProcessing(webapp2.RequestHandler):

  def get(self):
      requestKeyID=int(self.request.get('riderbeeRequestID'))
      userKey=self.request.get('userKey')
      pipeline = MatchingPipeline(requestKeyID, userKey)
      pipeline.start()
      self.redirect(pipeline.base_path + "/status?root=" + pipeline.pipeline_id)


class MatchingPipeline(base_handler.PipelineBase):
    def run(self, requestKeyID, userKey):
        yield mapreduce_pipeline.MapreducePipeline(
            "riderbee_matching",
            "tasks.matchingMR.riderbee_map",
            "tasks.matchingMR.riderbee_reduce",
            "mapreduce.input_readers.DatastoreInputReader",
            "mapreduce.output_writers.BlobstoreOutputWriter",
            mapper_params={
                "entity_kind": "models.rides.RiderbeeRequest",
                "requestKeyID": requestKeyID,
                "userKey": userKey,
            },
            reducer_params={
                "mime_type": "text/plain",
            },
            shards=16)


def riderbee_map(riderbeeRequest):
    # would like to access the requestKeyID and userKey parameters that were passed in mapper_params
    # so that we can do some processing based on that

    yield (riderbeeRequest.user.email, riderbeeRequest.key().id())


def riderbee_reduce(key, values):
    # would like to access the requestKeyID and userKey parameters that were passed earlier, perhaps through reducer_params
    # so that we can do some processing based on that

    yield "%s: %s\n" % (key, len(values))

助けてください?

4

2 に答える 2

5

mapper_parameters でパラメーターを指定して、コンテキスト モジュールから読み取ることができると確信しています。詳細については、 http://code.google.com/p/appengine-mapreduce/wiki/UserGuidePython#Mapper_parametersをご覧ください。

于 2012-06-29T23:24:23.923 に答える