Skip to content

Commit

Permalink
feat(core): support output filter (#303)
Browse files Browse the repository at this point in the history
## Main Changes

1. computation results output supports custom write.
2. `SingleSourceShortestPathOutput` implements `org.apache.hugegraph.computer.core.output.ComputerOutput#filter`

---------

Co-authored-by: imbajin <[email protected]>
  • Loading branch information
diaohancai and imbajin authored Aug 10, 2024
1 parent 547d191 commit e241d16
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -278,4 +278,8 @@ private boolean isAllTargetsReached(Vertex vertex) {
}
return false;
}

public IdSet getTargetIdSet() {
return this.targetIdSet;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@
import java.util.HashMap;
import java.util.Map;

import org.apache.hugegraph.computer.core.config.Config;
import org.apache.hugegraph.computer.core.graph.vertex.Vertex;
import org.apache.hugegraph.computer.core.output.hg.HugeGraphOutput;
import org.apache.hugegraph.computer.core.worker.Computation;
import org.apache.hugegraph.util.JsonUtil;

public class SingleSourceShortestPathOutput extends HugeGraphOutput<String> {
Expand All @@ -45,4 +47,10 @@ protected String value(Vertex vertex) {
map.put("total_weight", value.totalWeight());
return JsonUtil.toJson(map);
}

@Override
public boolean filter(Config config, Computation computation, Vertex vertex) {
SingleSourceShortestPath sssp = (SingleSourceShortestPath) computation;
return sssp.getTargetIdSet() == null || sssp.getTargetIdSet().contains(vertex.id());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import org.apache.hugegraph.computer.core.config.Config;
import org.apache.hugegraph.computer.core.graph.vertex.Vertex;
import org.apache.hugegraph.computer.core.worker.Computation;

/**
* Computer output is used to output computer results. There is an output object
Expand All @@ -37,6 +38,14 @@ public interface ComputerOutput {
*/
void write(Vertex vertex);

/**
* Write filter.
* True to commit the computation result, otherwise not to commit.
*/
default boolean filter(Config config, Computation computation, Vertex vertex) {
return true;
}

/**
* Merge output files of multiple partitions if applicable.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,9 @@ protected PartitionStat output() {
Edges edges = this.edgesInput.edges(this.vertexInput.idPointer());
vertex.edges(edges);

output.write(vertex);
if (output.filter(this.context.config(), this.computation, vertex)) {
output.write(vertex);
}
}

try {
Expand Down

0 comments on commit e241d16

Please sign in to comment.