2012-06-29 13 views
7

मुझे मैप्रिडस नौकरी चलाने की ज़रूरत है जो इस अर्थ में गतिशील है कि मापदंडों को नक्शे पर पारित करने की आवश्यकता होती है और मैप्रिडस नौकरी चलाने पर हर बार कार्यों को कम करने की आवश्यकता होती है (उदाहरण के लिए, उपयोगकर्ता अनुरोध के जवाब में)।GAE मैड्रिड पर फ़ंक्शन को मैप करने के लिए गतिशील रूप से पैरामीटर कैसे पास करें?

मैं इसे कैसे पूरा करूं? मैं प्रलेखन में कहीं भी नहीं देख सकता था कि मानचित्र के लिए रनटाइम पर गतिशील प्रसंस्करण कैसे करें और कम करें।

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)) 

कृपया मदद करें?

+0

FYI करें ... यहाँ जावा में एक नौकरी के लिए डेटा भेजने के लिए कैसे है - http: // www। thecloudavenue.com/2011/11/passing-parameters-to-mappers-and.html –

+0

हमम। लिंक जो आप हडोप सामान को इंगित करते हैं। यह GAE MapReduce के लिए है ... –

उत्तर

5

मुझे पूरा यकीन है कि आप केवल mapper_parameters में पैरामीटर निर्दिष्ट कर सकते हैं, और संदर्भ मॉड्यूल से उन्हें पढ़ सकते हैं। अधिक जानकारी के लिए http://code.google.com/p/appengine-mapreduce/wiki/UserGuidePython#Mapper_parameters देखें।

+0

सिवाय इसके कि आप उन पैरामीटर को संदर्भित करते हैं, वे गतिशील नहीं हैं (यानी, रनटाइम पर प्रोग्रामेटिक रूप से पारित नहीं किए जाते हैं) बल्कि वे mapreduce.yaml से पढ़े जाते हैं जो स्थैतिक है। यही है, जब तक कि मैं गलत नहीं समझता कि यह कैसे काम करेगा –

+0

आपके द्वारा ऊपर दिए गए कोड में, MapreducePipeline कन्स्ट्रक्टर के लिए एक mapper_params param है; एक mapreduce_parameters param भी है। ये यम फ़ाइल से आने वाले पैरा के बराबर हैं। यहां कोड देखें: http://code.google.com/p/appengine-mapreduce/source/browse/trunk/python/src/mapreduce/control.py –

4

यह नक्शाकार समारोह से नक्शाकार मानकों तक पहुंचने का तरीका, संदर्भ मॉड्यूल का उपयोग कर रहा है:

from mapreduce import context 

def riderbee_map(riderbeeRequest): 
    ctx = context.get() 
    params = ctx.mapreduce_spec.mapper.params 
    requestKeyID = params["requestKeyID"] 
संबंधित मुद्दे