Map Reduceを使用してグラフアルゴリズムを実装する必要があります。このため私は仕事を連鎖させなければならない。
MAP1のファイルから隣接する行列を読み取り、データと子情報を含むユーザー定義のJavaクラスNode
を作成します。私はこの情報をMAP2に渡したいと思います。
しかし、私はユーザー定義クラスを使用したジョブの連結
ノードデータは、Nodeクラスのcontext.writeを書き込むREDUCE1に(ノード、NullWritable.get())。
toString()
を使用してテキスト形式でファイルに保存されます。
MAP2は、このノード情報を読み取ろうとすると、
ます。public voidマップ(LongWritableキー、ノードノード、コンテキストコンテキスト)はIOExceptionがスローは、InterruptedExceptionある
それは内のテキストを変換することはできませんと言っていますノードへのファイル
Map reduceのジョブの連鎖のこのタイプの正しいアプローチは何か分かりません。
REDUCE1この形式でノードを書き込む:
ノード〔のnodeId = 1、adjacentNodes = [ノード〔のnodeId = 2、adjacentNodes = []、ノード[のnodeId = 2、adjacentNodes = [] ]]]
実際の例外:
のjava.lang.Exception:java.lang.ClassCastExceptionが: org.apache.hadoop.io.Textはcustom.node.nautyにキャストすることはできません。ノードコメントに基づい
WritableComparable(キーであるため、Comparable)を拡張する独自のクラス(Node)を定義する必要があります。次に、TextWritable.classではなくNode.classにoutputKeyClassを設定します。 – vefthym
私はそれを行いました。 MapからReduceにデータを送信するときのアプローチは適切です。しかし、Reduceはファイルに書き込むことしかできないようです。 2番目のマップを連鎖させるのは、1番目のreduceが書いたファイルからのみ読み込みます。第1回目のreduceは、Node(直列化)をファイルに書き込むことはできません。 – Dip
レデューサークラスとreduceメソッドをどのように宣言しますか?なぜ、ノードを減速機1のキーとして使用し、map2の値として使用するのですか?mapper2ではsequencefileinputformat、reducer1ではsequencefileoutputformatを使用し、textinputformatおよびtextoutputformatは使用しないでください。 – vefthym