0
このコードは「Apache Giraphを使用した実用的なグラフ分析」という本から借りています。Apache Giraph:setEdgeValue()でエッジ値を変更できません
私のコードの目標は、一方向のエッジのみを使用して2方向のエッジを使用するようにグラフを変換することです。
私のデータがTextDoubleDoubleAdjacencyListVertexInputFormatにタブ区切りのテキストファイルである:私は持っているエッジに期待していたこのコードを実行した後
import org.apache.giraph.GiraphRunner;
import org.apache.giraph.graph.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.util.ToolRunner;
import org.apache.giraph.edge.EdgeFactory;
public class DigraphToGraph extends BasicComputation<Text,DoubleWritable,DoubleWritable,Text>
{
static final DoubleWritable ORIG_E = new DoubleWritable (1),
NEW_E = new DoubleWritable (2);
@Override
public void compute(Vertex <Text,DoubleWritable, DoubleWritable> vertex, Iterable<Text> messages) {
if (getSuperstep() == 0)
sendMessageToAllEdges (vertex, vertex.getId());
else {
for (Text m:messages) {
DoubleWritable edgeValue = vertex.getEdgeValue (m);
if (edgeValue == null)
vertex.addEdge (EdgeFactory.create (m, NEW_E));
else
// problem HERE: try to relabel edge
vertex.setEdgeValue (m, ORIG_E);
}
}
vertex.voteToHalt();
}
}
:私の最小限の非稼働例がある
A 0 B 0
B 0
C 0 A 0 D 0
D 0 B 0 G 0
E 0 A 0 B 0 D 0
F 0 C 0 D 0
G 0 C 0 E 0
1または2の値。しかし、私が得るものは:
G 0.0 C 0.0 E 0.0 D 2.0
E 0.0 A 0.0 B 0.0 D 0.0 G 2.0
F 0.0 C 0.0 D 0.0
D 0.0 B 0.0 G 0.0 E 2.0 B 2.0 C 2.0
B 0.0 E 2.0 D 2.0 A 2.0
C 0.0 A 0.0 D 0.0 G 2.0 B 2.0
A 0.0 B 0.0 E 2.0 C 2.0
なぜ私のコードは既存のエッジを変更していないのですか?
私も使ってみました: 'removeEdgesRequest(vertex.getId()、m); addEdgeRequest(vertex.getId()、EdgeFactory.create(m、ORIG_E)); 'しかし、動作しませんでした。 –