python - Pyspark:将 RDD 转换为 RowMatrix

标签 python pyspark rdd similarity

我有一个形式为(id1,id2,score)的RDD。顶部(5)行看起来像

[(41955624, 42044497, 3.913625989045223e-06),
(41955624, 42039940, 0.0001018890937469129),
(41955624, 42037797, 7.901647831291928e-05),
(41955624, 42011137, -0.00016191403038589588),
(41955624, 42006663, -0.0005302800991148567)]

我想根据分数计算 id2 成员之间的相似度。我想使用 RowMatrix.columnSimilarity,但我需要先将其转换为 RowMatrix。我希望矩阵的结构为 id1 x id2——即,从 id1 中生成行 id,从 id2 中生成列 id。

如果我的数据较小,我可以将其转换为 Pyspark 数据框,然后使用像这样的数据透视

rdd_df.groupBy("id1").pivot("id2").sum("score")

但是那有超过 10,000 个不同的 id2,而我拥有的远不止这些。

天真 rdd_Mat = la.RowMatrix(红色) 将数据作为 3 列矩阵引入,这不是我想要的。

非常感谢。

最佳答案

数据的结构更接近于坐标矩阵的结构,它基本上是(long,long,float)元组RDD的包装器。因此,您可以非常轻松地从现有 RDD 创建一个 CoordinetMatrix

from pyspark.mllib.linalg.distributed import CoordinateMatrix

cmat=CoordinateMatrix(yourRDD)

此外,由于您最初要求的是 RowMatrix,pyspark 提供了一种在矩阵类型之间轻松转换的方法:

rmat=cmat.toRowMatrix()

为您提供所需的RowMatrix

关于python - Pyspark:将 RDD 转换为 RowMatrix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45623928/

相关文章:

dataframe - Pyspark 数据框 : crosstab or other method to make row label as new columns

python - 使用 pyspark 从 python 运行自定义函数

Java Spark Collect() javaRdd 因内存错误而失败(EMR 集群)

python - 具有恒定对角线且与另一个矩阵具有相同形状的空矩阵

python - 如何在 HTML 中运行 Python 脚本?

python - pyspark计算稀疏向量的距离矩阵

pyspark - 使用 Pyspark 从 Spark DataFrame 创建标记点

apache-spark - 如何在pyspark RDD中找到整个列数据的总和?

将字符串列表附加到数组的 Pythonic 方法

python - Pandas 在堆栈上的行为