---------- Forwarded message ----------
From: Ameya Vilankar <[email protected]>
Date: Fri, Jan 10, 2014 at 1:43 PM
Subject: Re: Writing my own aggregator..
To: Jyoti Yadav <[email protected]>
This should solve it I think. If it doesn't email me the error.
// MyArrayWritable.java
package org.apache.giraph.examples.utils;
import java.io.*;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.WritableComparator;
import java.util.Arrays;
import java.util.*;
public class MyArrayWritable implements Writable {
private ArrayList<Long> arraylist;
public MyArrayWritable()
{
arraylist = new ArrayList<Long>();
}
public MyArrayWritable(long toAdd)
{
arraylist = new ArrayList<Long>();
arraylist.add(toAdd);
}
public ArrayList<Long> get_arraylist()
{
return arraylist;
}
public void set_arraylist(ArrayList al)
{
this.arraylist = al;
}
@Override
public void readFields(DataInput in) throws IOException {
int size = in.readInt();
arraylist = new ArrayList<Long>(size);
for(int i = 0; i < size; i++)
{
arraylist.add(in.readLong());
}
}
@Override
public void write(DataOutput out) throws IOException {
out.writeInt(arraylist.size());
for(int i = 0; i < arraylist.size(); i++)
{
out.writeLong(arraylist.get(i));
}
}
@Override
public String toString()
{
return "output is "+ Long.toString(item) + "\n";
}
}
2.MyArrayAggregator.java
package org.apache.giraph.examples.utils;
import org.apache.giraph.aggregators.BasicAggregator;
import java.util.*;
public class MyArrayAggregator extends BasicAggregator<MyArrayWritable> {
@Override
public void aggregate(MyArrayWritable value) {
getAggregatedValue().get_arraylist().addAll(value);
}
@Override
public MyArrayWritable createInitialValue() {
return new MyArrayWritable();
}
}
On Fri, Jan 10, 2014 at 1:27 AM, Jyoti Yadav <[email protected]>wrote:
> Hi Ameya..
>
> I am badly stuck while implementing my custom aggregator..
> In my program i want to send each vertex id to master.
> For that i took an arraylist, in which each vertex is adding its own
> id.while running the program,each vertex calls aggregate() function..As per
> my observation it is working fine in vertex compute method.But while
> retrieving back in master compute function.arraylist is not reflected back
> to master compute function.
>
> I am attaching two files below..You are requested to please check it once..
>
> *1.MyArrayWritable.java*
>
> package org.apache.giraph.examples.utils;
>
> import java.io.*;
> import org.apache.hadoop.io.Writable;
> import org.apache.hadoop.io.LongWritable;
> import org.apache.hadoop.io.WritableComparator;
> import java.util.Arrays;
> import java.util.*;
>
>
> public class MyArrayWritable implements Writable {
>
> private long item;
> private ArrayList<Long> arraylist=new ArrayList<Long>(5);
>
> public MyArrayWritable()
> {
> item=0;
>
>
> //arraylist=new ArrayList<Long>(5);
> arraylist.add(item);
>
> }
>
> public MyArrayWritable(long item1)
> {
>
> item=item1;
> //arraylist=new ArrayList<Long>(5);
> arraylist.add(item);
>
> }
>
>
> public ArrayList<Long> get_arraylist() { return arraylist; }
> public void set_arraylist(ArrayList al)
> {
> //this.arraylist=new ArrayList<Long>(al);
> this.arraylist=al;
> }
> public long get_item(){return item;}
>
> @Override
> public void readFields(DataInput in) throws IOException {
> item=in.readLong();
> int size=arraylist.size();
> size=in.readInt();
>
> arraylist=new ArrayList<Long>(5);
>
> for(int i=0;i<size;i++)
> {
> arraylist.add(in.readLong());
> }
> }
> @Override
> public void write(DataOutput out) throws IOException {
> out.writeLong(item);
>
> out.writeInt(arraylist.size());
>
>
> for(int i=0;i<arraylist.size();i++)
> {
> out.writeLong(arraylist.get(i));
> }
>
>
> }
>
> @Override
> public String toString()
> {
> return "output is "+ Long.toString(item) + "\n";
> }
>
>
>
> }
>
>
> 2.MyArrayAggregator.java
>
> package org.apache.giraph.examples.utils;
> import org.apache.giraph.aggregators.BasicAggregator;
> import java.util.*;
>
>
> public class MyArrayAggregator extends BasicAggregator<MyArrayWritable> {
> @Override
> public void aggregate(MyArrayWritable value) {
> ArrayList<Long> al=new ArrayList<Long>();
> (getAggregatedValue().get_arraylist()).add(value.get_item());
> al=getAggregatedValue().get_arraylist();
> getAggregatedValue().set_arraylist(al);
>
> }
>
> @Override
> public MyArrayWritable createInitialValue() {
> return new MyArrayWritable();
> }
> }
>
> Thanks in advance ...
> Jyoti
>