首先,您從Mahout引用的「模型」不是模型,而是預先計算的推薦列表。您也可以使用Spark來完成此操作,併爲用戶批量推薦計算,並將其保留在您喜歡的任何位置。這與序列化模型無關。如果你不想做實時更新或評分,你可以在那裏停下來,就像你做Mahout一樣使用Spark進行批量處理。
但我同意在很多情況下,您確實希望將模型運送到其他地方並提供服務。如您所見,Spark中的其他型號爲Serializable
,但不是MatrixFactorizationModel
。 (是的,即使它被標記爲這樣,它也不會序列化)。同樣,對於稱爲PMML的預測模型有一個標準序列化,但它沒有包含因式矩陣模型的詞彙表。
原因實際上是一樣的。儘管許多預測模型(如支持向量機或邏輯迴歸模型)只是一小組係數,但分解矩陣模型非常龐大,包含兩個可能具有數十億個元素的矩陣。這就是爲什麼我認爲PMML沒有任何合理的編碼。
同樣,在Spark中,這意味着實際的矩陣是不能直接序列化的RDD
。您可以將這些RDD保存到存儲中,使用Spark在其他地方重新讀取它們,然後手動重新創建MatrixFactorizationModel
。
儘管您不能使用Spark來提供或更新模型。爲此,您真的在編寫一些代碼來執行更新並計算推薦。
我不介意在這裏建議Oryx項目,因爲它的重點在於管理這方面,尤其是對於ALS建議。實際上,Oryx 2項目基於Spark,雖然在alpha中已經包含完整的管道,用於序列化並提供MatrixFactorizationModel
的輸出。我不知道它是否符合您的需求,但至少可以成爲一個有趣的參考點。
感謝您的優秀和詳細的解釋!我會嘗試Oryx :) – shihpeng