我有一个Spark Dataframe
,它有两列:id
和hash_vector
。id
是文档的ID,hash_vector
是与文档对应的字数的SparseVector
(大小为30000)。Dataframe
中有大约100000行(每个文档一行)。
现在,我想找到每对文档之间的相似性。为此,我想从列hash_vector
计算余弦相似性。我可能还想尝试其他相似性度量,如Jaccard索引。什么是做这件事的好方法?我使用的是PySpark。我有几个想法:
1.我可以使用columnSimilarities
来查找两两点积,但是I read对于size_of_vocabulary〉〉number_of_documents的语料库更有效(这里不是这种情况)
1.我可以遍历Dataframe
行,对于第i行,将第i行作为列new_column
添加到Dataframe
中,然后写入udf
,以查找两列的相似性(余弦或Jaccard):hash_vector
和new_column
。但是I read通过行循环胜过使用Spark的所有目的。
1.最后,我只存储超过某个阈值的相似性,因为我有很多文档,所以我可以预期相似性矩阵是相当稀疏的。
我知道这是一个宽泛的问题。但我很想知道一个Maven会如何考虑这个问题。我欣赏任何方向。
1条答案
按热度按时间qni6mghb1#
您是否尝试过将表与其自身进行交叉连接?例如