如何在不聚合原始 RDD 分区的情况下与多个 RDD 进行分组?

我有两个 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]))]

如何更改代码以获得如上所示的输出?谢谢你。


函数式编程
浏览 134回答 1
1回答

ibeautiful

您可以通过直接连接来做到这一点:print(x.join(y).collect())#[('A', (1, -1)), ('A', (2, -1)), ('B', (4, 5))]mapValues如果您希望 s 的元素为tuples,请添加调用list:print(x.join(y).mapValues(lambda a: tuple([b] for b in a)).collect())#[('A', ([1], [-1])), ('A', ([2], [-1])), ('B', ([4], [5]))]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python