多标记数据上的共生矩阵

时间:2017-12-29 10:41:04

标签: apache-spark pyspark apache-spark-sql rdd

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

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来实现它?我想也许我需要重塑数据/枢轴,但我提出的解决方案似乎有点复杂...

谢谢!

1 个答案:

答案 0 :(得分:1)

按班级和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)对,请先应用distinct。