我有一个大桌子,如下所示:
(a,b,1)
(a,c,2)
(b,a,3)
(b,c,4)
(c,a,5)
每行代表(user1,user2,times)
我想在这里做的是总结每个用户的互惠时间。这意味着,经过一系列转换后,结果应如下所示:
(a,b,4)
(a,c,7)
(b,c,4)
例如,(a,b,4)
表示(a,b,1+3)
。值得注意的是,最终结果中的用户付款以删除副本。
那么我该怎么做才能实现呢?非常感谢
使用least
和greatest
对(x,y),(y,x)
进行分组(如果存在)对处理。下面显示了一种在Pyspark中进行的方法。
from pyspark.sql import functions as f
df.select(f.least(df.user1,df.user2).alias('cl'),f.greatest(df.user1,df.user2).alias('cg'),df.times)
.groupBy('cl','cg')
.agg(f.sum(times))
.show(truncate = False)