如何遍历Spark RDD以评估嵌套元组中的每个元素,并将结果附加到原始RDD?

时间:2018-12-27 04:56:46

标签: python apache-spark pyspark

如果这是一个初学者的问题,抱歉,PySpark和Python都是新手。

我在这里有一个RDD,它是一个元组,它包含电影ID作为第一个元素(1、2、3、4 ...等),并包含一个二进制整数字符串作为第二个元素。因此,电影ID是键,而二进制整数是值。

电影ID,类型

1,(1,0,0,1,0,1,1,0,0,0,0,0,0,1)

2,(0,0,1,1,0,1,0,0,0,0,0,0,1,1)

以此类推。

每个二进制整数表示影片ID是否属于特定类型。我想在PySpark中建立一个推荐系统,该系统将采用电影ID为50的方式,并将其二进制整数(指示其所属的流派)与RDD中其他所有电影ID的二进制整数进行比较。如果两个二进制整数在同一位置= 1,则某种计数器将增加。影片ID在与影片ID 50的1相同的位置具有1的次数越多,计数器增加的次数就越大。计数器将存储在一个变量中,该变量测量每个电影ID与电影ID 50的类型的匹配程度。由于每个电影ID与另一个电影ID的位置相同的次数越多,它们的类型就越紧密和更强的建议。

然后,我打算形成一个仅包含电影ID和计数器值作为我的键值对的新RDD,并完全丢弃二进制整数。

这样我的最终结果将更像:

MovieID,类型

1、5

2,3

将感谢您的帮助!预先谢谢你!

1 个答案:

答案 0 :(得分:0)

这是矩阵乘法的优秀案例。 enter image description here

A^T * B will give you the exact counter itself that you want!!
    where A is the matrix of your binary integers in Movie ID 50
          B is the matrix of binary integers in other movie IDs

当您在相同位置上有“ 1”时,矩阵乘法将产生1,否则该位置的矩阵相乘将产生0。

因此,例如:1 + 1 + 0 + ..... + 1 =您确切想要的答案。 完成这些操作后,您必须必须gregationByKey。

尝试这种逻辑。您将实现。 但是,提供您的数据集。我也许可以给你一个代码。 干杯!