Is this true? The fact that SampleValue and Address implement
Serializable should be sufficient to write them out to the stream.
They are not ever written out as keys or values themselves.
-steve
On 10/10/07, Matt Kent <[EMAIL PROTECTED]> wrote:
> I believe in this case you'll want to make Sample and Address writable as
> well.
>
> On 10/10/07, Steve Schlosser <[EMAIL PROTECTED]> wrote:
> > Hello all
> >
> > Is there a best practice for using my own classes as keys and values?
> >
> > My first attempt at doing this was successful - I built a
> > BigIntegerWritable class using IntWritable as a template. It was easy
> > because BigInteger has methods converting to and from byte arrays,
> > which I could then write into the DataOutput or read from the
> > DataInput.
> >
> > It seems like I should be able to use object serialization to write
> > to/read from the DataOutput/Input objects and make my own classes
> > implement the Writable interface. It seems like I should be able to
> > do something like this:
> >
> > import java.io.*;
> >
> > import org.apache.hadoop.io.*;
> >
> > public class Sample implements Writable {
> >
> > Address address;
> > SampleValue value; // sampled value at this point
> >
> > public Sample(Address a, SampleValue v) {
> > address = a;
> > value = v;
> > }
> >
> > public SampleValue getValue() { return value;}
> > public Address getAddress() { return address; }
> >
> > public String toString () {
> > return (address.toString() + " " + value.toString());
> > }
> >
> > [...]
> >
> > public void readFields(DataInput in) throws IOException {
> > ObjectInputStream oin = new ObjectInputStream((DataInputBuffer)in);
> >
> > try {
> > address = (Address)oin.readObject();
> > value = (SampleValue)oin.readObject();
> > } catch (ClassNotFoundException e) {
> > throw new IOException(e.toString());
> > }
> >
> > }
> >
> > public void write(DataOutput out) throws IOException {
> > ObjectOutputStream oout = new
> > ObjectOutputStream((DataOutputBuffer)out);
> >
> > oout.writeObject(address);
> > oout.writeObject(value);
> > }
> > }
> >
> > This code compiles, but throws exceptions at runtime, complaining that
> > WritableComparator can not access a member of class Sample with
> > modifiers "". Can someone tell me what this exception is talking
> > about?
> >
> > Do I need to implement a WritableComparator for each class that I want
> > to implement Writable?
> >
> > Thanks again for the help.
> >
> > -steve
> >
>