如果不聚合原始RDD的分区,如何将多个RDD分组?

2024-06-02 09:45:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

如何更改代码以获得上述输出?谢谢你


Tags: 代码in命令mapfor格式listcollect
1条回答
网友
1楼 · 发布于 2024-06-02 09:45:24

您可以使用直线连接来执行此操作:

print(x.join(y).collect())
#[('A', (1, -1)), ('A', (2, -1)), ('B', (4, 5))]

如果希望tuple的元素为list,请添加对mapValues的调用:

print(x.join(y).mapValues(lambda a: tuple([b] for b in a)).collect())
#[('A', ([1], [-1])), ('A', ([2], [-1])), ('B', ([4], [5]))]

相关问题 更多 >