Apache spark pyspark:按值将单个RDD拆分为多个RDD
我找不到答案。 如果我有RDDApache 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 = 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])