Spark如何将(键值列表)拆分为键值对

时间:2019-04-07 19:07:03

标签: python pyspark

给出具有几个键值对的RDD,其中每个值实际上是一个值列表,如何拆分值列表,以得到简单的键值对?

from pyspark import SparkConf, SparkContext
conf = SparkConf()
sc = SparkContext(conf=conf)
foo = sc.parallelize([(0,[1,1,4]),(1,[3,5])])
bar = foo.map(magic)
bar.collect()
>>>>[(0,1),(0,1),(0,4),(1,3),(1,5)]

magic将如何实现我想要的目标?

2 个答案:

答案 0 :(得分:1)

想通了:

bar=foo.flatMap(lambda l: [(l[0], value) for value in l[1]])

我意识到这是一个非常简单的问题和解决方案,但是如果其他人从pyspark开始苦苦挣扎,我会保留它。

答案 1 :(得分:0)

Python使您可以任意组合许多生成器表达式,从本质上讲,您可以像这样“展开”嵌套结构。每个“层”将是一个新的for _ in _

lambda l: [(key, value) for (key, values) in l for value in values]
>>> l = [(0,[1,1,4]),(1,[3,5])]
>>> [(key, value) for (key, values) in l for value in values]
[(0, 1), (0, 1), (0, 4), (1, 3), (1, 5)]