In my Implementation every vertex has its own bags of "knowledge" (i.e. it knows all tuples belonging to it..). So in Vertex 1 I have a field (an HashMap) containing the following info:
- type=Person - livesIn=2 (and I know also that 2 is a vertexId) In Vertex 3 I know: - type=Place - name=Berlin - containedIn=4 (and I know also that 4 is a vertexId) and so on.. On Wed, Jul 8, 2015 at 2:29 PM, Vasiliki Kalavri <vasilikikala...@gmail.com> wrote: > Hi Flavio, > > yes, I think it's possible. I have one question before I try to explain > how: > do you model "Rome", "Berlin", "101.3" etc. in your above example as > separate vertices or as properties of vertices? > > On 8 July 2015 at 10:43, Flavio Pompermaier <pomperma...@okkam.it> wrote: > >> Let's say I have some nodes of some type of interest (type1 and type2). >> My source data looks like <sourceNodeId, type, edgeName, destNodeId>. >> For example, I could be interested in sourceNodes having type == Person >> to gather the value obtained from the expansion of some paths (for >> example livesIn.name and marriedTo.name). Notice that I could define other >> paths of interest for different types.. (For nodes of type Place I could be >> interested in gathering containedIn.name). >> If my source data looks like: >> >> (1, Person, livesIn, 2) >> (1, Person, livesIn, 3) >> (2, Place, name, "Rome") >> (2, Place, lat, 101.3) >> (2, Place, long, 101.3) >> (3, Place, name, "Berlin") >> (3, Place, containedIn, 4) >> (4, Country, name, "Germany") >> >> I'd like that node 1 (in the end) collect the following paths: >> >> livesIn.name : "Rome" (from node 2) >> livesIn.name : "Berlin" (from node 3) >> livesIn.containedIn.name: "Germany" (from node 4) >> marriedTo.name : null because not married :) >> >> So, in my vertexCentricIteration each Vertex knows its neighbors (e.g. >> node 1 knows that 2 and 3 should be queried for their "name" attribute). >> If they receive a message asking for "name" from node 1 they have to >> reply to node 1 with the value of that property. >> >> So in my implementation, I check whether my node has to send some query >> to neighbors and wait for the response. The problem is that node 3 for >> example, once queried for property containedIn.name from node 1 it just >> have to forward this path to node 4 and thell to 4 to reply to 1. >> >> Is that possible? >> >> >> On Wed, Jul 8, 2015 at 10:19 AM, Vasiliki Kalavri < >> vasilikikala...@gmail.com> wrote: >> >>> Is it the same message that you propagate or is it different for each >>> vertex / neighbor? If you have to store a <neighborID, msg> pair for each >>> neighbor, then you will quickly run out of memory. If it's the same message >>> you need to send, or you simply need to add the current vertex Id, then you >>> can probably get rid of the neighborID. >>> >>> By "outbox" I believe you mean storing them in the vertex value, correct? >>> I don't think you will have to explicitly reset it, as in each superstep >>> vertices only receive messages sent in the previous superstep, i.e. "old" >>> messages don't get re-sent. >>> On Jul 8, 2015 9:48 AM, "Flavio Pompermaier" <pomperma...@okkam.it> >>> wrote: >>> >>>> The problem is that my nodes have to gather data coming from some path >>>> of interest along the graph (depending on the type of the node), otherwise >>>> they just have to forward the received message adding their id to the >>>> message path (more or less). It's like a postal tracking system. >>>> >>>> The problem is that I have to reset the "outbox" of each vertex once >>>> the messages have been sent.. >>>> Do you think that it makes sense in this case to have an outbox of >>>> messages (destination, message) in each vertex and reset it in the >>>> postSuperstep() of the VertexUpdateFunction? >>>> >>>> On Wed, Jul 8, 2015 at 9:38 AM, Vasiliki Kalavri < >>>> vasilikikala...@gmail.com> wrote: >>>> >>>>> Hi Flavio! >>>>> >>>>> Are you talking about vertex-centric iterations in gelly? >>>>> >>>>> If yes, you can send messages to a particular vertex with >>>>> "sendMessageTo(vertexId, msg)" and >>>>> to all neighbors with "sendMessageToAllNeighbors(msg)". These methods >>>>> are available inside the MessagingFunction. >>>>> Accessing received messages happens inside the VertexUpdateFunction. >>>>> So, the usual way of writing these programs is to: >>>>> (1) go through received messages in the VertexUpdateFunction and >>>>> compute the new vertex value based them >>>>> (2) compute and send messages in the MessagingFunction. >>>>> >>>>> Would that work in you case? >>>>> >>>>> Cheers, >>>>> Vasia. >>>>> >>>>> On 8 July 2015 at 08:47, Flavio Pompermaier <pomperma...@okkam.it> >>>>> wrote: >>>>> >>>>>> >>>>>> Hi to all, >>>>>> is there a way in gelly to forward received messages (and modify >>>>>> their content before sending)? >>>>>> >>>>>> Best, >>>>>> Flavio >>>>>> >>>>>> >>>>> >>>> >> >