我有点想在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”来做到这一点吗?
非常感谢你们。
答案 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