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

Spark - Converting DataFrame to RowMatrix to compute all-pairs similarity efficiently

我有一个很大的 DataFrame,其中包含用户和项目之间的关系,如下所示:

        item1  item2
user1       0      1
user2       1      0

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

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

因为我想出的用 DataFrame 解决这个问题的每一种方法似乎都很低效,我想知道从我的 [= 中获得 RowMatrix 的最佳方法14=].

或者,在最好的情况下,如果我遗漏了什么,并且有更好的方法来解决 DataFrame 的所有对相似性问题,我很想听听。

阅读了一些关于 RowMatrix 的内容后,您似乎需要将 dataframe 转换为 RDD

为此,您可以使用:

val rows = df.content.rdd.map{ case row =>
Vectors.dense(row.toSeq.toArray.map{
    x => x.asInstanceOf[Integer]
  })
}.collect

然后在您的代码中使用 rows

希望对您有所帮助。

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

在 Python:

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