我有一个用户数据集,每个用户可以属于多个类:
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来实现它?我想也许我需要重塑数据/枢轴,但我提出的解决方案似乎有点复杂...
谢谢!
答案 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。