使用pyspark 進行向量計算

最近根據Airbnb在KDD 2018的bestpaper《Real-time Personalization using Embeddings for Search Ranking at Airbnb》做實時推薦的項目。其中在表達用戶短期興趣特徵時我們是將用戶近兩週對item的行爲數乘以對應item向量並將所有行爲向量相加。此處item向量已由word2vec訓練好。

數據格式如下:

我們需要將num*vector後按user_id groupby求vector和。

一開始用的方法是將spark.dataframe轉換成pandas.dataframe處理(分佈式轉換方法可以參考另一篇博文:https://blog.csdn.net/htbeker/article/details/93630921)。這樣做樣本量在千萬級可以,但是涉及到兩種dataframe之間來回轉換很麻煩,而且樣本量上去之後我們公司的計算平臺就開始error了,後面嘗試了使用rdd計算的方法,可以在兩種dataframe間切換並支持大量樣本的計算,代碼也很簡潔,如下:

dff = spark.createDataFrame(df.rdd.map(lambda x: (x.user_id,x.num*x.vector))\
                            .reduceByKey(lambda x,y:x+y),schema = ['user_id','vector'])

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章