我剛剛看過Batch data processing with App Engine session of Google I/O 2010,閱讀MapReduce article from Google Research的某些部分,現在我想用MapReduce on Google App Engine來實現Python中的推薦系統。MapReduce在Google App Engine中的多個數據存儲種類
我更喜歡使用appengine-mapreduce而不是Task Queue API,因爲前者提供了對某種類型的所有實例,自動批處理,自動任務鏈等的簡單迭代。問題是:我的推薦系統需要計算實例之間的關聯兩種不同的模型,即兩種不同類型的實例。
例如: 我有這兩個模型:用戶和項目。每個人都有一個標籤列表作爲屬性。以下是計算用戶和項目之間相關性的函數。需要注意的是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計算概念相兼容。然而,我需要確定的是,對於我擁有像自動批處理和任務鏈這樣的appengine-mapreduce優勢,這將非常棒。
有沒有解決方案?
我應該定義我自己的InputReader嗎?一個新的讀取兩種不同類型的所有實例的InputReader與當前的appengine-mapreduce實現兼容嗎?
或者我應該嘗試以下方法嗎?
- 由兩個結合所有鍵這兩個類型的所有實體,二,成(MapReduce的可能使用)一個新的模型的實例
- 迭代使用映射器在這種新的模式
- 的情況下,對於每個實例中,使用其中的鍵來獲取不同種類的兩個實體並計算它們之間的相關性。
標準是什麼在用戶和項目通過呢?它是用戶和項目的每個組合嗎?只是那些以某種方式相關的?另外,那是什麼語言?這不是(完全)Python! – 2010-09-24 10:26:34
應爲每個用戶和項目的組合調用'calculateCorrelation'。現在我刪除了各種變量以避免混淆。 – fjsj 2010-09-24 17:34:53