使用pyspark 进行向量计算

最近根据Airbnb在KDD 2018的bestpaper《Real-time Personalization using Embeddings for Search Ranking at Airbnb》做实时推荐的项目。其中在表达用户短期兴趣特征时我们是将用户近两周对item的行为数乘以对应item向量并将所有行为向量相加。此处item向量已由word2vec训练好。

数据格式如下:

使用pyspark 进行向量计算_第1张图片

我们需要将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'])

使用pyspark 进行向量计算_第2张图片

 

你可能感兴趣的:(pyspark)