Spark-将DataFrame转换为RowMatrix以有效计算所有对相似度

时间:2018-10-25 15:14:30

标签: python apache-spark pyspark apache-spark-mllib

我有一个很大的DataFrame,充满了用户和项目之间的关系,像这样:

        item1  item2
user1       0      1
user2       1      0

并希望有效地解决所有对相似性问题。

如果使用columnSimilarities对象,我可以使用pyspark.mllib模块的RowMatrix方法。

由于我想出的用DataFrame解决此问题的每种方法似乎效率都非常低,我想知道从我的{{1} }。

或者,在最佳情况下,如果我丢失了某些东西,并且有一种更好的方法来解决RowMatrix的全对相似性问题,我很乐意听到。

2 个答案:

答案 0 :(得分:0)

在阅读了一些有关df.melt('conc').drop('variable',1).sort_values('conc') Out[40]: conc value 0 0 0.1 2 0 0.2 4 0 0.1 1 1 3.0 3 1 3.2 5 1 2.8 的知识之后,您似乎需要将RowMatrix转换为dataframe

为此,您可以使用:

RDD

然后在代码中使用val rows = df.content.rdd.map{ case row => Vectors.dense(row.toSeq.toArray.map{ x => x.asInstanceOf[Integer] }) }.collect

我希望这会有所帮助。

答案 1 :(得分:0)

如其他答案中所述,无法将DataFrame直接转换为RowMatrix。您首先需要获得一个RDD对象。

为此在Python上

your_rdd = your_dataframe.rdd.map(list)
your_rowmatrix = RowMatrix(your_rdd)