使用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'])

扫描下方二维码关注领取程序员必备千套ppt模板,300本精选好书,丰富面经:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值