拆分RDD

时间:2018-02-25 22:36:56

标签: python apache-spark pyspark rdd

我想将列表((A,1,2,3),(B,4,5,6),(C,7,8,9))拆分为:

(A,1)
(A,2)
(A,3)
(B,4)
(B,5)
...

我试过rdd.flatMapValues(lambda x: [x]),但它只给了我第一个值。然后我写了一个小python函数:

item_index = []
for list in master_list:
    for item in list:
        item_index.append((list[0],item))

但我没有意识到你无法将RDD传递给它。任何建议都会很棒。

1 个答案:

答案 0 :(得分:2)

正如您所说,您有rdd [["A",1,2,3],["B",4,5,6],["C",7,8,9]]

master_list = sc.parallelize([["A",1,2,3],["B",4,5,6],["C",7,8,9]])

您可以flatMap并进行一些迭代以获得所需的输出

master_list.flatMap(lambda x: [[x[0], x[i]] for i in range(1, len(x))])

您必须输出为

['A', 1]
['A', 2]
['A', 3]
['B', 4]
['B', 5]
['B', 6]
['C', 7]
['C', 8]
['C', 9]

我希望答案很有帮助