【发布时间】:2017-10-15 03:34:15
【问题描述】:
我即将在 PySpark 中计算两个向量的余弦相似度,比如
1 - spatial.distance.cosine(xvec, yvec)
但 scipy 似乎不支持 pyspark.ml.linalg.Vector 类型。
【问题讨论】:
标签: pyspark apache-spark-mllib
我即将在 PySpark 中计算两个向量的余弦相似度,比如
1 - spatial.distance.cosine(xvec, yvec)
但 scipy 似乎不支持 pyspark.ml.linalg.Vector 类型。
【问题讨论】:
标签: pyspark apache-spark-mllib
您可以使用dot 和norm 方法轻松计算:
from pyspark.ml.linalg import Vectors
x = Vectors.dense([1,2,3])
y = Vectors.dense([2,3,5])
1 - x.dot(y)/(x.norm(2)*y.norm(2))
# 0.0028235350472619603
使用 scipy:
from scipy.spatial.distance import cosine
x = np.array([1,2,3])
y = np.array([2,3,5])
cosine(x, y)
# 0.0028235350472619603
【讨论】:
df_new = df_with_vectors.select("vector1", "vector2", "vector1.dot(vector2)/(vector1.norm(2)*vector2.norm(2)) as norm_src") 这样的东西会给出need struct type but got vector 的错误。