多标签数据上的共现矩阵



我有一个用户数据集,每个用户可以属于多个类:

user1, A
user1, B
user1, C
user2, A
user2, C
user3, B
user3, C

例如,在本例中,user1 属于类 A、B 和 C。我想知道每对类中有多少唯一用户(表中的每个条目对应于共享的唯一用户数(:

  | A | B | C
A | 2 | 1 | 1
B | 1 | 2 | 2
C | 1 | 2 | 2

我想知道如何在 PySpark 中使用数据帧和 RDD 来做到这一点?我想也许我需要重塑数据/枢轴,但我想出的解决方案对于这项任务来说似乎有点复杂......

谢谢!

按类和crosstab自加入

(df.withColumnRenamed("class", "class_a")
    .join(df.withColumnRenamed("class", "class_b"), ["user"])
    .crosstab("class_a", "class_b")
    .orderBy("class_a_class_b")
    .show())
# +---------------+---+---+---+ 
# |class_a_class_b|  A|  B|  C|
# +---------------+---+---+---+ 
# |              A|  2|  1|  2|
# |              B|  1|  2|  2|
# |              C|  2|  2|  3|
# +---------------+---+---+---+

如果只想使用唯一的(user, class)对,请先应用非重复。

相关内容

  • 没有找到相关文章

最新更新