我在pyspark中有一个键值RDD,并希望返回在源RDD中具有相同键的对的RDD。
#input rdd of id and user
rdd1 = sc.parallelize([(1, "user1"), (1, "user2"), (2, "user1"), (2, "user3"), (3,"user2"), (3,"user4"), (3,"user1")])
#desired output
[("user1","user2"),("user1","user3"),("user1","user4"),("user2","user4")]
到目前为止,我一直无法提出正确的功能组合来做到这一点。其目的是基于共享公共密钥创建用户边缘列表。
答案 0 :(得分:2)
据我所知,您的描述应该有效:
output = (rdd1
.groupByKey()
.mapValues(set)
.flatMap(lambda kvs: [(x, y) for x in kvs[1] for y in kvs[1] if x < y])
.distinct())
不幸的是,这是相当昂贵的操作。