我有两个具有共同变量的RDD,其格式如下:
x = sc.parallelize([("A", 1), ("B", 4),("A",2)])
y = sc.parallelize([("A", -1),("B", 5)])
然后我想使用公共变量将它们分组。 "A"
和"B"
。
我尝试使用以下命令:
z = [(x, tuple(map(list, y))) for x, y in sorted(list(x.cogroup(y).collect()))]
print(z)
我得到的是
[('A', ([1, 2], [-1])), ('B', ([4], [5]))]
但是,我想要的是
[('A', ([1], [-1])), ('B', ([4], [5])),('A', ([2], [-1]))]
如何更改代码以获取上述输出?谢谢。
答案 0 :(得分:1)
您可以通过直接联接来做到这一点:
print(x.join(y).collect())
#[('A', (1, -1)), ('A', (2, -1)), ('B', (4, 5))]
如果您希望mapValues
的元素为tuple
,请添加对list
的调用:
print(x.join(y).mapValues(lambda a: tuple([b] for b in a)).collect())
#[('A', ([1], [-1])), ('A', ([2], [-1])), ('B', ([4], [5]))]