2016-08-26 14 views
1

pysparkの問題を解決しようとしています。何かを得、pysparkでreduceByKeyを使用して要素をリストに追加する方法

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

私は各キーのために同じキーを持つすべてのタプルのリストを追加するふり:後のマップ機能を使用して同じ計算を行う、私はこのようにdictsのリストが含まれRDDを持っています以下のような:

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

そして、私はこのようなdictsのリストを取得したいと思います:

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

私は例が、それはより多くの実例だと思う

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

"combineByKey"関数の使用が避けようとしていますが、時間がかかり過ぎるため、 "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 
関連する問題