我有一个用户数据集,每个用户可以属于多个类:
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)
对,请先应用非重复。