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); > } > } > } >