【问题标题】:Pyspark: Converting RDD to RowMatrixPyspark:将 RDD 转换为 RowMatrix
【发布时间】:2017-08-10 21:46:39
【问题描述】:

我有一个 (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(red) 将数据作为 3 列矩阵引入,这不是我想要的。

非常感谢。

【问题讨论】:

    标签: python pyspark rdd similarity


    【解决方案1】:

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

    from pyspark.mllib.linalg.distributed import CoordinateMatrix
    
    cmat=CoordinateMatrix(yourRDD)
    

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

    rmat=cmat.toRowMatrix()
    

    给你想要的RowMatrix

    【讨论】:

    • 谢谢。我发现我必须做一个将 id 转换为连续整数的中间步骤,以避免制作一个 40 毫米列的矩阵。
    • 不客气。如果此答案已解决您的问题,请考虑通过单击复选标记接受它。没有义务。
    猜你喜欢
    • 1970-01-01
    • 2016-05-29
    • 2015-12-22
    • 2021-06-29
    • 2023-03-13
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多