Apache spark pyspark:按值将单个RDD拆分为多个RDD

Apache spark pyspark:按值将单个RDD拆分为多个RDD,apache-spark,pyspark,rdd,Apache Spark,Pyspark,Rdd,我找不到答案。 如果我有RDD rdd = sc.parallelize([('a', [1,2,3]), ('b',[4,5,6])]) 其中每个值都是一个列表。 是否有方法拆分RDD,使其成为 sc.parallelize([('a',1),('a',2),('a',3),('b',4),('b',5),('b'6)]) 其中,现在每个值都是列表中的一个元素,并与键匹配。 我大致知道解决办法。我们可以先收集() 然后将RDD重新分配为 rdd2 = sc.parallelize([x f

我找不到答案。 如果我有RDD

rdd = sc.parallelize([('a', [1,2,3]), ('b',[4,5,6])])
其中每个值都是一个列表。 是否有方法拆分RDD,使其成为

sc.parallelize([('a',1),('a',2),('a',3),('b',4),('b',5),('b'6)])
其中,现在每个值都是列表中的一个元素,并与键匹配。 我大致知道解决办法。我们可以先收集()

然后将RDD重新分配为

rdd2 = sc.parallelize([x for x in a])

但是如果RDD很大,那么
collect()
将非常耗时。我们必须按比例考虑。有没有分布式的方法?(如使用
lambda函数等)谢谢

这是
flatMap
的任务:

rdd.flatMap(λx:[(x[0],v)表示x[1]中的v)]).collect()
#[('a',1),('a',2),('a',3),('b',4),('b',5),('b',6)]

此处lambda函数从原始rdd中获取一个键值对,并将该键值映射到每个单独的值:

lamb=lambda x:[(x[0],v)表示x[1]中的v]
羔羊(('a',[1,2,3]))
#[('a',1),('a',2),('a',3)]

flatMap
将此操作映射到每个键值对并展平结果。

谢谢!这正是我需要的!
rdd2 = sc.parallelize([x for x in a])