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