如何计算PySpark中两个向量的余弦相似性?

如何计算PySpark中两个向量的余弦相似性?,pyspark,apache-spark-mllib,Pyspark,Apache Spark Mllib,我要计算PySpark中两个向量的余弦相似性,比如 1 - spatial.distance.cosine(xvec, yvec) 但是scipy似乎不支持pyspark.ml.linalg.Vector类型 您可以使用点法和范数法轻松计算: 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))

我要计算PySpark中两个向量的余弦相似性,比如

1 - spatial.distance.cosine(xvec, yvec)
但是scipy似乎不支持pyspark.ml.linalg.Vector类型

您可以使用点法和范数法轻松计算:

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 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:


@Psidom为什么不能将其应用于整个向量类型列?类似于此的df_new=df_with_vectors.selectvector1,vector2,vector1.dotvector2/vector1.norm2*vector2.norm2 as norm_src给出了一个需要结构类型的错误,但得到了向量。@Psidom为什么我不能将其应用于整个向量类型列?类似这样的df_new=df_with_vectors.selectvector1,vector2,vector1.dotvector2/vector1.norm2*vector2.norm2 as norm_src给出了一个需要结构类型的错误,但得到了向量。