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