giraph-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hudson (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (GIRAPH-547) Allow in-place modification of edges
Date Wed, 20 Mar 2013 21:21:17 GMT

    [ https://issues.apache.org/jira/browse/GIRAPH-547?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13608241#comment-13608241
] 

Hudson commented on GIRAPH-547:
-------------------------------

Integrated in Giraph-trunk-Commit #814 (See [https://builds.apache.org/job/Giraph-trunk-Commit/814/])
    GIRAPH-547: Allow in-place modification of edges (apresta) (Revision 5bb956cad2d9c4beded036553f715f0e3156d665)

     Result = FAILURE
alessandro : http://git-wip-us.apache.org/repos/asf?p=giraph.git&a=commit&h=5bb956cad2d9c4beded036553f715f0e3156d665
Files : 
* giraph-core/src/main/java/org/apache/giraph/edge/LongNullHashSetEdges.java
* giraph-core/src/main/java/org/apache/giraph/edge/MutableEdgesWrapper.java
* giraph-core/src/main/java/org/apache/giraph/edge/MapMutableEdge.java
* giraph-core/src/main/java/org/apache/giraph/edge/EdgeNoValue.java
* giraph-core/src/main/java/org/apache/giraph/edge/MutableEdge.java
* giraph-core/src/main/java/org/apache/giraph/conf/ImmutableClassesGiraphConfiguration.java
* giraph-core/src/main/java/org/apache/giraph/edge/LongDoubleArrayEdges.java
* giraph-core/src/main/java/org/apache/giraph/edge/ReusableEdge.java
* giraph-core/src/main/java/org/apache/giraph/edge/MutableEdgesIterable.java
* giraph-core/src/test/java/org/apache/giraph/edge/TestNullValueEdges.java
* giraph-core/src/test/java/org/apache/giraph/graph/TestVertexAndEdges.java
* giraph-core/src/main/java/org/apache/giraph/edge/LongDoubleHashMapEdges.java
* giraph-core/src/main/java/org/apache/giraph/edge/ByteArrayEdges.java
* giraph-core/src/main/java/org/apache/giraph/edge/HashMultimapEdges.java
* giraph-core/src/main/java/org/apache/giraph/edge/ArrayListEdges.java
* giraph-core/src/main/java/org/apache/giraph/edge/StrictRandomAccessVertexEdges.java
* giraph-hive/src/main/java/org/apache/giraph/hive/input/edge/HiveEdgeReader.java
* giraph-core/src/main/java/org/apache/giraph/graph/Vertex.java
* giraph-core/src/main/java/org/apache/giraph/edge/EdgeFactory.java
* giraph-core/src/main/java/org/apache/giraph/utils/PairListWritable.java
* giraph-core/src/main/java/org/apache/giraph/graph/ComputeCallable.java
* giraph-core/src/main/java/org/apache/giraph/edge/EdgeStore.java
* giraph-core/src/main/java/org/apache/giraph/edge/MutableVertexEdges.java
* CHANGELOG
* giraph-core/src/main/java/org/apache/giraph/edge/LongNullArrayEdges.java
* giraph-core/src/main/java/org/apache/giraph/edge/DefaultEdge.java
* giraph-core/src/test/java/org/apache/giraph/edge/TestStrictRandomAccessEdges.java
* giraph-core/src/main/java/org/apache/giraph/utils/ByteArrayVertexIdEdges.java
* giraph-core/src/main/java/org/apache/giraph/edge/HashMapEdges.java

                
> Allow in-place modification of edges
> ------------------------------------
>
>                 Key: GIRAPH-547
>                 URL: https://issues.apache.org/jira/browse/GIRAPH-547
>             Project: Giraph
>          Issue Type: New Feature
>            Reporter: Alessandro Presta
>            Assignee: Alessandro Presta
>         Attachments: GIRAPH-547.patch
>
>
> This is a somewhat long term item.
> Because of some optimized edge storage implementations (byte array, primitive array),
we have a contract with the user that Edge objects returned by getEdges() are read-only.
> One concrete example where in-place modification would be useful: in the weighted version
of PageRank, you can store the weight sum and normalize each message sent, or you could more
efficiently normalize the out-edges once in superstep 0.
> The Pregel paper describes an OutEdgeIterator that allows for in-place modification of
edges. I can see how that would be easy to implement in C++, where there is no need to reuse
objects.
> Giraph "unofficially" supports this if one is using generic collections to represent
edges (e.g. ArrayList or HashMap).
> It may be trickier in some optimized implementations, but in principle it should be doable.
> One way would be to have some special MutableEdge implementation which calls back to
the edge data structure in order to save modifications:
> {code}
> for (Edge<I, E> edge : getEdges()) {
>   edge.setValue(newValue);
> }
> {code}
> Another option would be to add a special set() method to our edge iterator, where one
can replace the current edge:
> {code}
> for (EdgeIterator<I, E> it = getEdges().iterator(); it.hasNext();) {
>   Edge<I, E> edge = it.next();
>   edge.setValue(newValue);
>   it.set(edge);
> }
> {code}
> We could actually implement the first version as syntactic sugar on top of the second
version (the special MutableEdge would need a reference to the iterator in order to call set(this)).

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message