pyspark:按值将单个RDD分割为多个RDD

我无法找到答案。 如果我有RDDpyspark:按值将单个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)]) 

现在在哪里每个值是列表的元素之一,搭配的关键。 我大致知道解决方案。我们可以先collect()

a = rdd.collect() 

,并重新分配一个RDD作为

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

但如果RDD巨大,collect()会非常耗时。我们必须按比例考虑它。有没有分散的方式来做到这一点? (如使用lambda function ..等)谢谢!

回答:

它是flatMap任务:

rdd.flatMap(lambda x: [(x[0], v) for v in x[1]]).collect() 

# [('a', 1), ('a', 2), ('a', 3), ('b', 4), ('b', 5), ('b', 6)]


这里lambda函数需要从原来的RDD一个键值对和地图的关键,每个单独的值:

lamb = lambda x: [(x[0], v) for v in x[1]] 

lamb(('a', [1,2,3]))

# [('a', 1), ('a', 2), ('a', 3)]

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

以上是 pyspark:按值将单个RDD分割为多个RDD 的全部内容, 来源链接: utcz.com/qa/259046.html

回到顶部