如果这是一个初学者的问题,抱歉,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
将感谢您的帮助!预先谢谢你!
答案 0 :(得分:0)
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。
尝试这种逻辑。您将实现。 但是,提供您的数据集。我也许可以给你一个代码。 干杯!