如何在pyspark中使用reduceByKey将元素追加到列表中

时间:2016-08-26 10:06:18

标签: python append pyspark rdd reduce

我有点想在pyspark解决问题。在使用map函数进行相同的计算之后,我有一个RDD,其中包含以这种方式的dicts列表:

[{key1: tuple1}, {key1: tuple2}....{key2: tuple1}, {keyN: tupleN}] 

我假装为每个键附加一个包含所有具有相同键的元组的列表,获得类似的内容:

[{key1: [tuple1, tuple2, tuple3...]}, {key2: [tuple1, tuple2....]}] 

我认为这是一个更具说明性的例子:

[{0: (0, 1.0)}, {0: (1, 0.0)}, {1: (0, 0.0)}, {1: (1, 1.0)}, {2:(0,0.0)}... ]

我想获得这样的词组列表:

[{0: [(0, 1.0), (1, 0.0)}, {1: [(0, 0.0), (1, 1.0)]}, {2:[(0,0.0),...]},...]

我试图避免使用“combineByKey”函数,因为它持续时间过长,有可能用“reduceByKey”来做到这一点吗?

非常感谢你们。

1 个答案:

答案 0 :(得分:0)

这里有一个可能的解决方案,不使用reduceByKey而只是python内置函数:

from collections import defaultdict


inp = [{0: (0, 1.0)}, {0: (1, 0.0)}, {1: (0, 0.0)},
       {1: (1, 1.0)}, {2: (0, 0.0)}]

out = defaultdict(list)

for v in inp:
    for k, v1 in v.iteritems():
        out[k].append(v1)

out = [{k: v} for k, v in out.iteritems()]
print out