2016-08-26 7 views
1

Я как бы застреваю, пытаясь решить проблему в pyspark. После того, как делать то же вычисление, используя функцию карты, у меня есть RDD, который содержит список dicts следующим образом:Как добавить элементы в список с помощью reduceByKey в pyspark

[{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)}... ] 

И я хотел бы получить список dicts так:

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

Я пытаюсь избежать использования функции «combByKey», потому что она длится слишком много времени, есть ли возможность сделать это с помощью «reduceByKey» ??

Спасибо всем вам.

ответ

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 

 Смежные вопросы

  • Нет связанных вопросов^_^