Hmm, what method from ArrayListWritable allows you to access the different
elements of the ArrayList?  Would it be readFields?  for example, in a
reduce phase, if I needed to know the size of the array list, it would be
easy if i were dealing with an arraylist because i could just say
arraylist.size.  How would i accomplish that with the writable counterpart?

On Sun, Oct 19, 2008 at 1:04 AM, Joman Chu <[EMAIL PROTECTED]> wrote:

> Hi,
>
> For the ArrayList object, try taking a look at the implementation of
> ArrayListWritable by Jimmy Lin at UMD here:
>
>
> https://subversion.umiacs.umd.edu/umd-hadoop/core/trunk/src/edu/umd/cloud9/io/ArrayListWritable.java
>
> But basically in the readFields methods, I prefer using each Writable
> object's readFields method to read the data in. For example, for your
> double variable, I would use a DoubleWritable object and in the
> MyWritable.readFields(DataInput in), I would use
> nameofdoublewritable.readFields(in). For the
> MyWritable.write(DataOutput out) method, I would use
> nameofdoublewritable.write(out).
>
> Have a good one,
>
> Joman Chu
> http://www.notatypewriter.com/
> AIM: ARcanUSNUMquam
>
>
>
> On Sun, Oct 19, 2008 at 3:30 AM, Yih Sun Khoo <[EMAIL PROTECTED]> wrote:
> > I don't quite know how to write the read and write functions, but I want
> to
> > write my own writable, which should have a DoubleWritable/double value
> > followed by a list of Strings/Text.  This Writable will be used as a
> value.
> > Is the code below the best way to go about writing such a writable?
> >
> > import java.io.DataInput;
> > import java.io.DataOutput;
> > import java.io.EOFException;
> > import java.io.IOException;
> > import java.util.ArrayList;
> >
> > import org.apache.hadoop.io.Writable;
> >
> > public class MyWritable implements Writable {
> >    private double score;
> >    private ArrayList<String> nameList;
> >
> >    public void setScore(double score) {
> >        this.score= score;
> >    }
> >
> >    public void setNameList(ArrayList<String> nameList) {
> >        this.nameList= nameList;
> >    }
> >
> >    public double getScore() {
> >        return score;
> >    }
> >
> >    public ArrayList<String> getNameList() {
> >        return nameList;
> >    }
> >
> >    public void readFields(DataInput in) throws IOException {
> >        score= in.readDouble();
> >        try {
> >            do {
> >                nameList.add(in.readUTF());
> >            } while (true);
> >        } catch (EOFException eofe) {
> >            // continue; done
> >        }
> >    }
> >
> >    public void write(DataOutput out) throws IOException {
> >        out.writeDouble(score);
> >        for (String name: nameList) {
> >            out.writeUTF(name);
> >        }
> >    }
> > }
> >
>

Reply via email to