在PySpark 1.6中是否有更有效的方法来实现余弦相似度?

阿扎玛特

我正在尝试计算user_id用户表中的给定表与电影表中的另一个表之间的余弦相似度,以便挑选出最相似的电影来推荐。

余弦相似度:=dot(a,b) / (norm(a) * norm(b))dot(a,b)/sqrt((dot(a)*dot(b))

df = self.given_user.crossJoin(self.movies_df)
df = df.select('userId', 'movieId', 'user_features', 'movie_features')
df = df.rdd.map(lambda x: (x[0], x[1], x[2], x[3], float(np.dot(np.array(x[2]), np.array(x[3]))))).toDF(df.columns + ['dotxy'])
df = df.rdd.map(lambda x: (x[0], x[1], x[2], x[3], x[4], float(np.dot(np.array(x[2]), np.array(x[2]))))).toDF(df.columns + ['dotxx'])
df = df.rdd.map(lambda x: (x[0], x[1], x[2], x[3], x[4], x[5], float(np.dot(np.array(x[3]), np.array(x[3]))))).toDF(df.columns + ['dotyy'])
output = df.withColumn('cosine_sim', F.col("dotxy") / F.sqrt(F.col("dotxx") * F.col("dotyy")))

output.select('userId', 'movieId', 'dotxy', 'dotxx', 'dotyy', 'cosine_sim').orderBy('cosine_sim', ascending=False).show(5)

结果输出如下所示:

+------+-------+-----+-----+-----+----------+
|userId|movieId|dotxy|dotxx|dotyy|cosine_sim|
+------+-------+-----+-----+-----+----------+
|    18|   1430|  1.0|  0.5|  2.0|       1.0|
|    18|   2177|  1.0|  0.5|  2.0|       1.0|
|    18|   1565|  1.0|  0.5|  2.0|       1.0|
|    18|    415|  1.0|  0.5|  2.0|       1.0|
|    18|   1764|  1.0|  0.5|  2.0|       1.0|
+------+-------+-----+-----+-----+----------+

PySpark 1.6中是否存在更有效/更紧凑的余弦相似度函数实现方式?

拉曼努斯

您可以使用更多numpy功能。

import numpy as np

df = spark.createDataFrame([(18, 1, [1, 0, 1], [1, 1, 1])]).toDF('userId','movieId','user_features','movie_features')

df.rdd.map(lambda x: (x[0], x[1], x[2], x[3], float(np.dot(np.array(x[2]), np.array(x[3])) / (np.linalg.norm(np.array(x[2])) * np.linalg.norm(np.array(x[3])))))).toDF(df.columns + ['cosine_sim']).show()

+------+-------+-------------+--------------+------------------+
|userId|movieId|user_features|movie_features|       cosine_sim |
+------+-------+-------------+--------------+------------------+
|    18|      1|    [1, 0, 1]|     [1, 1, 1]|0.8164965809277259|
+------+-------+-------------+--------------+------------------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检查pyspark中是否有NA的有效方法

来自分类Dev

有没有一种有效的方法来计算比特流中 1 的密度?

来自分类Dev

在Typescript的订阅中是否有更有效的方法来订阅

来自分类Dev

在pyspark中添加UUID的有效方法

来自分类Dev

寻找一种有效的方法来重塑数据框:从n * m到1 *(n + m)

来自分类Dev

pyspark 中的单热编码,连续多个 1

来自分类Dev

单击表中的链接,是否有更有效的方法来检索复选框元素?

来自分类Dev

是否有一种更有效的方法来将图像居中在浮动div中

来自分类Dev

是否有一种班轮或更有效的方法来完成此任务?

来自分类Dev

是否有更有效的方法来编写多个 if else?

来自分类Dev

更有效的方法来实现这一目标?

来自分类Dev

如何在Spark(pySpark v1.2.0)中更有效地加载Parquet文件

来自分类Dev

有没有更有效的方法来在servlet中输出html?

来自分类Dev

++运算符比a = a + 1更有效吗?

来自分类Dev

开发更有效的n-1行循环

来自分类Dev

如何在PySpark中按价值有效排序?

来自分类Dev

如何确定对象是否是PySpark中的有效键值对

来自分类Dev

有没有更好/更有效的方法来实现这一目标?

来自分类Dev

更有效的方法来删除np.array中的最后N个值

来自分类Dev

带有AWS Glue的Pyspark将1-N关系连接到JSON数组中

来自分类Dev

pyspark中具有1秒差异的总计时间戳

来自分类Dev

需要一种有效且正确的方法来清除一点不确定的Java语言中的1或0

来自分类Dev

检查可遍历在Scala中是否包含1个以上元素的有效方法

来自分类Dev

在pyspark中累积数据帧的最有效方法是什么?

来自分类Dev

一种更有效的方法来检查是否没有相关项目具有特定值

来自分类Dev

有没有更系统的方法来解决缓慢的AWS Glue + PySpark执行阶段?

来自分类Dev

在文件中更改1行的最有效方法

来自分类Dev

有没有更有效的方法来检查字符串中的字符?

来自分类Dev

有没有更有效的方法来增加字典中每个键的值?

Related 相关文章

  1. 1

    检查pyspark中是否有NA的有效方法

  2. 2

    有没有一种有效的方法来计算比特流中 1 的密度?

  3. 3

    在Typescript的订阅中是否有更有效的方法来订阅

  4. 4

    在pyspark中添加UUID的有效方法

  5. 5

    寻找一种有效的方法来重塑数据框:从n * m到1 *(n + m)

  6. 6

    pyspark 中的单热编码,连续多个 1

  7. 7

    单击表中的链接,是否有更有效的方法来检索复选框元素?

  8. 8

    是否有一种更有效的方法来将图像居中在浮动div中

  9. 9

    是否有一种班轮或更有效的方法来完成此任务?

  10. 10

    是否有更有效的方法来编写多个 if else?

  11. 11

    更有效的方法来实现这一目标?

  12. 12

    如何在Spark(pySpark v1.2.0)中更有效地加载Parquet文件

  13. 13

    有没有更有效的方法来在servlet中输出html?

  14. 14

    ++运算符比a = a + 1更有效吗?

  15. 15

    开发更有效的n-1行循环

  16. 16

    如何在PySpark中按价值有效排序?

  17. 17

    如何确定对象是否是PySpark中的有效键值对

  18. 18

    有没有更好/更有效的方法来实现这一目标?

  19. 19

    更有效的方法来删除np.array中的最后N个值

  20. 20

    带有AWS Glue的Pyspark将1-N关系连接到JSON数组中

  21. 21

    pyspark中具有1秒差异的总计时间戳

  22. 22

    需要一种有效且正确的方法来清除一点不确定的Java语言中的1或0

  23. 23

    检查可遍历在Scala中是否包含1个以上元素的有效方法

  24. 24

    在pyspark中累积数据帧的最有效方法是什么?

  25. 25

    一种更有效的方法来检查是否没有相关项目具有特定值

  26. 26

    有没有更系统的方法来解决缓慢的AWS Glue + PySpark执行阶段?

  27. 27

    在文件中更改1行的最有效方法

  28. 28

    有没有更有效的方法来检查字符串中的字符?

  29. 29

    有没有更有效的方法来增加字典中每个键的值?

热门标签

归档