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