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)
我有一个很大的 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)