使用Dataframe在行之间激活余弦距离

时间:2017-10-10 09:53:38

标签: apache-spark pyspark spark-dataframe cosine-similarity

我必须计算每行之间的余弦距离,但我不知道如何使用Spark API Dataframes优雅地完成它。我们的想法是计算每个行(项)的相似度,并通过比较它们之间的相似性来获得前10个相似性。 - >这需要物品推荐系统。

我所读过的所有内容都被称为Apache Spark Python Cosine Similarity over DataFrames列上的计算相似度 有人可能会说使用PySpark Dataframe的API或RDD可以在行之间优雅地计算余弦距离,或者我必须手动完成吗?

这只是一些显示我打算做什么的代码

def cosineSimilarity(vec1, vec2):
    return vec1.dot(vec2) / (LA.norm(vec1) * LA.norm(vec2))


#p.s model is ALS
Pred_Factors = model.itemFactors.cache() #Pred_Factors = DataFrame[id: int, features: array<float>]

sims = []

for _id,_feature in Pred_Factors.toLocalIterator():
    for id, feature in Pred_Factors.toLocalIterator():

        itemFactor = _feature

        sims = sims.append(_id, cosineSimilarity(asarray(feature),itemFactor))

sims = sc.parallelize(l)
sortedSims = sims.takeOrdered(10, key=lambda x: -x[1])

先谢谢所有帮助

1 个答案:

答案 0 :(得分:4)

您可以使用mllib.feature.IndexedRowMatrix的{​​{1}}功能。它使用余弦指标作为距离函数。它计算列之间的相似性,因此,在应用此函数之前必须进行转置。

columnSimilarities