में एक से अधिक डेटास्टोर प्रकार पर मैपराइडस मैंने Batch data processing with App Engine session of Google I/O 2010 देखा, MapReduce article from Google Research के कुछ हिस्सों को पढ़ें और अब मैं पाइथन में एक अनुशंसा प्रणाली को लागू करने के लिए MapReduce on Google App Engine का उपयोग करने के बारे में सोच रहा हूं।Google App Engine
मैं कार्य कतार एपीआई के बजाय एपेंगिन-मैप्रेडस का उपयोग करना पसंद करता हूं क्योंकि पूर्व किसी प्रकार, स्वचालित बैचिंग, स्वचालित कार्य श्रृंखला आदि के सभी उदाहरणों पर आसान पुनरावृत्ति प्रदान करता है। समस्या यह है कि: मेरे अनुशंसाकर्ता प्रणाली को उदाहरणों के बीच सहसंबंध की गणना करने की आवश्यकता है दो अलग-अलग मॉडल, यानी, दो अलग-अलग प्रकार के उदाहरण।
उदाहरण: मेरे पास इन दो मॉडल हैं: उपयोगकर्ता और आइटम। प्रत्येक में एक विशेषता के रूप में टैग की एक सूची है। उपयोगकर्ताओं और वस्तुओं के बीच सहसंबंध की गणना करने के लिए कार्य नीचे दिए गए हैं। ध्यान दें कि calculateCorrelation
उपयोगकर्ताओं और आइटम के प्रत्येक संयोजन के लिए बुलाया जाना चाहिए:
def calculateCorrelation(user, item):
return calculateCorrelationAverage(u.tags, i.tags)
def calculateCorrelationAverage(tags1, tags2):
correlationSum = 0.0
for (tag1, tag2) in allCombinations(tags1, tags2):
correlationSum += correlation(tag1, tag2)
return correlationSum/(len(tags1) + len(tags2))
def allCombinations(list1, list2):
combinations = []
for x in list1:
for y in list2:
combinations.append((x, y))
return combinations
लेकिन उस calculateCorrelation
appengine-mapreduce में एक वैध मैपर नहीं है और हो सकता है इस समारोह MapReduce गणना अवधारणा के साथ भी संगत नहीं है। फिर भी, मुझे यह सुनिश्चित करने की ज़रूरत है कि मेरे लिए स्वचालित बैचिंग और कार्य श्रृंखला जैसे ऐपेंजिन-मैप्रिडस फायदे होने के लिए यह वास्तव में बहुत अच्छा होगा।
क्या इसके लिए कोई समाधान है?
क्या मुझे अपना खुद का इनपुट रीडर परिभाषित करना चाहिए? एक नया इनपुट रीडर जो दो अलग-अलग प्रकार के सभी उदाहरण पढ़ता है, वर्तमान एपेंगेन-मैप्रिडस कार्यान्वयन के साथ संगत है?
या मुझे निम्नलिखित का प्रयास करना चाहिए?
- दो द्वारा दो इन दो प्रकार की सभी संस्थाओं के सभी चाबियाँ कम्बाइन, एक नया मॉडल के उदाहरण (संभवतः का उपयोग कर MapReduce) में,
- दोहराएं इस नए मॉडल
- के उदाहरण से प्रत्येक के लिए खत्म हो गया मानचित्रकारों का उपयोग कर उदाहरण के लिए, विभिन्न प्रकार की दो इकाइयों को प्राप्त करने और उनके बीच सहसंबंध की गणना करने के लिए इसके अंदर कुंजियों का उपयोग करें।
क्या मानदंड उपयोगकर्ता और आइटम में पारित करने के लिए कर रहे हैं? क्या यह उपयोगकर्ता और वस्तु का हर संयोजन है? बस कुछ जो किसी तरह से संबंधित हैं? इसके अलावा, वह भाषा क्या है? यह (काफी) पायथन नहीं है! –
'गणना गणना' उपयोगकर्ता और आइटम के प्रत्येक संयोजन के लिए बुलाया जाना चाहिए। और अब मैंने भ्रम से बचने के लिए चर के प्रकार हटा दिए हैं। – fjsj