我有这样一个Dataframe:
+-------+-------+------------------+-------+----+
|userId1|movieId| rat1|userId2|rat2|
+-------+-------+------------------+-------+----+
| 1| 1| 1.0| 2| 1.0|
| 1| 2| 1.0| 2| 2.0|
| 1| 3| 2.0| 2| 3.0|
| 2| 1| 1.0| 3| 0.0|
| 2| 2| 2.0| 3| 0.0|
| 2| 3| 3.0| 3| 0.0|
| 3| 1| 0.0| 1| 1.0|
| 3| 2| 0.0| 1| 1.0|
....
其中rat1和rat2是user1和user2的评级。我想要的是计算两个用户之间的余弦相似度,我的想法是从这个Dataframe中提取数组,然后计算余弦相似度,例如:
arrayUser1 = (1,1,2)
arrayUser2 = (1,2,3)
arrayUser3 = (0,0,0)
问题是我不知道如何提取这些数组,有人有办法吗?或者用更好的方法计算相似性的技巧?
2条答案
按热度按时间jdgnovmf1#
您可以先将rat1和rat2相乘,然后按userid1和userid2分组,并将乘积相加:
flvtvl502#
您可以使用Dataframe
groupBy
操作并执行collect_set
聚合下面是示例代码。