最近根据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.youkuaiyun.com/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'])

最低0.47元/天 解锁文章
1462

被折叠的 条评论
为什么被折叠?



