使用(键和列表)转换touple(键和列表项)

时间:2018-04-23 12:54:55

标签: python python-3.x pyspark rdd

我有一个带有(key,list [word1,word2,word3])的RDD,我希望将其转换为(key,word1),(key,word2)...(key,word-n),can有人指出我正确的方向如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

使用列表理解:

key, list_ = ('key', ['word1', 'word2', 'word3'])
result = [(key, item) for item in list_]
print(result)

输出:

[('key', 'word1'), ('key', 'word2'), ('key', 'word3')]

您可以使用flatMap()

将此解决方案应用于rdd
myrdd = sc.parallelize([('key', ['word1', 'word2', 'word3'])])
myrdd.flatMap(lambda row: [(row[0], item) for item in row[1]]).collect()
#[('key', 'word1'), ('key', 'word2'), ('key', 'word3')]

答案 1 :(得分:0)

使用列表推导,迭代元组并将第一个元素与第二个元素中的每个项相关联:

>>> tupl = ('key', ['word1', 'word2', 'word3'])  
>>> [(tupl[0], tupl[1][i]) for i in range(len(tupl[1]))]
[('key', 'word1'), ('key', 'word2'), ('key', 'word3')]

您可以使用flatMap()

将此解决方案应用于rdd
myrdd = sc.parallelize([('key', ['word1', 'word2', 'word3'])])
myrdd.flatMap(lambda tupl: [(tupl[0], tupl[1][i]) for i in range(len(tupl[1]))]).collect()
#[('key', 'word1'), ('key', 'word2'), ('key', 'word3')]