You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@giraph.apache.org by Luo <lu...@163.com> on 2014/01/10 08:54:36 UTC

About aggregator's input data type and output data type

hi all:
org.apache.giraph.aggregators has these tow methods:
 void aggregate(A value)
  A   getAggregatedValue() 




Now I want to use  aggregate()  in vertex_program to send value of type A for global aggregating,  however,
I want the output of custom aggregator  is  type B .


that is to say ,  
void aggregate(A value)
  B   getAggregatedValue()


Is there any idea for this? 
Thank a lot !




========================
Luo

Re:Re: Re: About aggregator's input data type and output data type

Posted by Luo <lu...@163.com>.
I' ll try it , thanks a lot.

At 2014-01-13 00:02:28,"Young Han" <yo...@uwaterloo.ca> wrote:

Hi,

Another workaround is to use an abstract class as A and then implement it concretely in the two ways you need it.


If I'm not mistaken, aggregators are the recommended way to communicate between master.compute() and (worker's) vertex.compute() in Giraph. I personally don't know if it's the *only* way.


Young




On Sun, Jan 12, 2014 at 5:30 AM, Luo <lu...@163.com> wrote:


Hi,  Young
That is a choice.  
But  I just want transform A or B when each vertex computing , now I need transform A and B.  And in my program, the  A and B are both somehow large. 
Is there another way to share global variable between each vertex beside getAggregatedValue() ?
thanks a lot !

Luo





At 2014-01-11 01:17:21,"Young Han" <yo...@uwaterloo.ca> wrote:

Hi,

One way, though not a very clean way, would be to create an object that encapsulates what you want to store in A and B. So, say you want A to be a DoubleWritable and B to be a Writable object with two integers. Then you could just create a Writable object having three fields: double, int, int. You'll have to implement a custom Writable class, but you won't need a special aggregator.


Young



On Fri, Jan 10, 2014 at 2:54 AM, Luo <lu...@163.com> wrote:

hi all:
org.apache.giraph.aggregators has these tow methods:
 void aggregate(A value)
  A   getAggregatedValue() 




Now I want to use  aggregate()  in vertex_program to send value of type A for global aggregating,  however,
I want the output of custom aggregator  is  type B .


that is to say ,  
void aggregate(A value)
  B   getAggregatedValue()


Is there any idea for this? 
Thank a lot !




========================
Luo










Re: Re: About aggregator's input data type and output data type

Posted by Young Han <yo...@uwaterloo.ca>.
Hi,

Another workaround is to use an abstract class as A and then implement it
concretely in the two ways you need it.

If I'm not mistaken, aggregators are the recommended way to communicate
between master.compute() and (worker's) vertex.compute() in Giraph. I
personally don't know if it's the *only* way.

Young


On Sun, Jan 12, 2014 at 5:30 AM, Luo <lu...@163.com> wrote:

>
> Hi,  Young
> That is a choice.
> But  I just want transform A or B when each vertex computing , now I need
> transform A and B.  And in my program, the  A and B are both somehow large.
> Is there another way to share global variable between each vertex beside
> getAggregatedValue() ?
> thanks a lot !
>
> Luo
>
>
>
>
> At 2014-01-11 01:17:21,"Young Han" <yo...@uwaterloo.ca> wrote:
>
> Hi,
>
> One way, though not a very clean way, would be to create an object that
> encapsulates what you want to store in A and B. So, say you want A to be a
> DoubleWritable and B to be a Writable object with two integers. Then you
> could just create a Writable object having three fields: double, int, int.
> You'll have to implement a custom Writable class, but you won't need a
> special aggregator.
>
> Young
>
>
> On Fri, Jan 10, 2014 at 2:54 AM, Luo <lu...@163.com> wrote:
>
>> hi all:
>> org.apache.giraph.aggregators has these tow methods:  void aggregate<http://giraph.apache.org/giraph-core/apidocs/org/apache/giraph/aggregators/Aggregator.html#aggregate(A)>
>> (A<http://giraph.apache.org/giraph-core/apidocs/org/apache/giraph/aggregators/Aggregator.html>
>>  value)
>>   A   getAggregatedValue<http://giraph.apache.org/giraph-core/apidocs/org/apache/giraph/aggregators/Aggregator.html#getAggregatedValue()>
>> ()
>>
>>
>> Now I want to use  aggregate()  in vertex_program to send value of type A
>> for global aggregating,  however,
>> I want the output of custom aggregator  is  type B .
>>
>> that is to say ,
>> void aggregate(A value)
>>   B   getAggregatedValue()
>>
>> Is there any idea for this?
>> Thank a lot !
>>
>>
>> ========================
>> Luo
>>
>>
>>
>
>
>

Re:Re: About aggregator's input data type and output data type

Posted by Luo <lu...@163.com>.
Hi,  Young
That is a choice.  
But  I just want transform A or B when each vertex computing , now I need transform A and B.  And in my program, the  A and B are both somehow large. 
Is there another way to share global variable between each vertex beside getAggregatedValue() ?
thanks a lot !

Luo





At 2014-01-11 01:17:21,"Young Han" <yo...@uwaterloo.ca> wrote:

Hi,

One way, though not a very clean way, would be to create an object that encapsulates what you want to store in A and B. So, say you want A to be a DoubleWritable and B to be a Writable object with two integers. Then you could just create a Writable object having three fields: double, int, int. You'll have to implement a custom Writable class, but you won't need a special aggregator.


Young



On Fri, Jan 10, 2014 at 2:54 AM, Luo <lu...@163.com> wrote:

hi all:
org.apache.giraph.aggregators has these tow methods:
 void aggregate(A value)
  A   getAggregatedValue() 




Now I want to use  aggregate()  in vertex_program to send value of type A for global aggregating,  however,
I want the output of custom aggregator  is  type B .


that is to say ,  
void aggregate(A value)
  B   getAggregatedValue()


Is there any idea for this? 
Thank a lot !




========================
Luo





Re: About aggregator's input data type and output data type

Posted by Young Han <yo...@uwaterloo.ca>.
Hi,

One way, though not a very clean way, would be to create an object that
encapsulates what you want to store in A and B. So, say you want A to be a
DoubleWritable and B to be a Writable object with two integers. Then you
could just create a Writable object having three fields: double, int, int.
You'll have to implement a custom Writable class, but you won't need a
special aggregator.

Young


On Fri, Jan 10, 2014 at 2:54 AM, Luo <lu...@163.com> wrote:

> hi all:
> org.apache.giraph.aggregators has these tow methods: void aggregate<http://giraph.apache.org/giraph-core/apidocs/org/apache/giraph/aggregators/Aggregator.html#aggregate(A)>
> (A<http://giraph.apache.org/giraph-core/apidocs/org/apache/giraph/aggregators/Aggregator.html>
>  value)
>   A   getAggregatedValue<http://giraph.apache.org/giraph-core/apidocs/org/apache/giraph/aggregators/Aggregator.html#getAggregatedValue()>
> ()
>
>
> Now I want to use  aggregate()  in vertex_program to send value of type A
> for global aggregating,  however,
> I want the output of custom aggregator  is  type B .
>
> that is to say ,
> void aggregate(A value)
>   B   getAggregatedValue()
>
> Is there any idea for this?
> Thank a lot !
>
>
> ========================
> Luo
>
>
>