2017-11-29 14 views
1

私は、エッジリストからPythonのMap Reduce関数を作成する助けが必要です。私のコードは以下のフォーマットに従ってくださいマップを作成するエッジリストからPythonの関数を減らす

A,B 
A,C 
A,D 
B,C 
C,A 
C,B 
D,A 

は、以下のリストを与えられました。私の目標は度数と一緒に度数リストを表示することです。

map(key, value): 
//key: document name; value: text of the document 
    for each word w in value: 
     emit(w, 1) 

reduce(key, values): 
//key: a word; value: an iterator over counts 
    result = 0 
    for each count v in values: 
     result += v 
     emit(key, result) 

ループは常に私にとって苦労しています。誰かが私を正しい方向に向けることができますか?

次のように出力は次のようになります。

Degree  Count 
1   2 
2   1 
3   1 

コードは、私はそれを理解して、私はそれぞれの文字に異なる値の数をカウントする必要があり、同様に

をフォーマットされたので、設定されたすべてのデータのために働く必要がありますこれと対になる - これは "程度"(A、例えば、次数3)であり、次数に応じて対を合計する - これが "数"になる。

キーは値のペアですか?

map(key, value): 
//key: document name; value: text of the document 
    for each word w in value: 
     emit([x,y], 1) 
+0

希望の出力を投稿してください。 – Ajax1234

+0

あなたがワードカウントの例を投稿したようです。あなたの入力と希望する出力の列ラベルは何ですか? – pault

答えて

1

私はMapReduceのは、この問題にアプローチするための最良の方法であるかどうかわからないんだけど、私は次のことが理にかなっていると思います。

最初に、各頂点 - エッジペアを(頂点、1)にマッピングします。次に、各頂点の数を合計することで縮小します。

map(key, value): 
//key: vertex; value: edge 
    emit(key, 1) 

reduce(key, values): 
//key: vertex; value: an iterator over counts 
    result = 0 
    for each count v in values: 
     result += v 
     emit(key, result) 

また、pythonタグはこの質問には適していないと思います。

これは、入力行が一意であることを前提としています。

+0

ありがとうございます。意味あり!私はpythonタグを削除しました。 – Aoitori

関連する問題