Maybe change "id" to be an IntWritable, and "str" to be a Text?

HTH,

DR

On 01/19/2011 09:36 AM, Joan wrote:
Hi Lance,

My custom object has Writable implement but I don't overrride toString
method?

*public class MyWritable implements DBWritable, Writable, Cloneable  {

     int id;
     String str;

     @Override
     public void readFields(ResultSet rs) throws SQLException {

         id = rs.getInt(1);
         str = rs.getString(2);
     }

     @Override
     public void write(PreparedStatement pstmt) throws SQLException {
         // do nothing
     }

     @Override
     public void readFields(DataInput in) throws IOException {
         id = in.readInt();
         str = Text.readString(in);
     }

     @Override
     public void write(DataOutput out) throws IOException {

         out.writeInt(id);
         Text.writeString(out, str);
     }
}*

But I don't understand why not serialize object,

Thanks

Joan



2011/1/17 Lance Norskog<[email protected]>

Does you custom object have Writable implemented? Also, does it have
toString() implemented? I think this means the Writable code does not
work:

K  CustomObject@2b237512
K  CustomObject@24db06de

This is Java's default toString() method.

On Mon, Jan 17, 2011 at 12:19 AM, Joan<[email protected]>  wrote:
Hi Alain,

I put it, but It didn't work.

Joan

2011/1/14 MONTMORY Alain<[email protected]>

Hi,



I think you have to put :

             job.setOutputFormatClass(SequenceFileOutputFormat.class);

to make it works..

hopes this help



Alain



[@@THALES GROUP RESTRICTED@@]



De : Joan [mailto:[email protected]]
Envoyé : vendredi 14 janvier 2011 13:58
À : mapreduce-user
Objet : how to write custom object using M/R



Hi,

I'm trying to write (K,V) where K is a Text object and V's CustomObject.
But It doesn't run.

I'm configuring output job like: SequenceFileInputFormat so I have job
with:

         job.setMapOutputKeyClass(Text.class);
         job.setMapOutputValueClass(CustomObject.class);
         job.setOutputKeyClass(Text.class);
         job.setOutputValueClass(CustomObject.class);

         SequenceFileOutputFormat.setOutputPath(job, new Path("myPath");

And I obtain the next output (this is a file: part-r-00000):

K  CustomObject@2b237512
K  CustomObject@24db06de
...

When this job finished I run other job which input is
SequenceFileInputFormat but It doesn't run:

The configuration's second job is:

         job.setInputFormatClass(SequenceFileInputFormat.class);
         SequenceFileInputFormat.addInputPath(job, new Path("myPath"));

But I get an error:

java.io.IOException: hdfs://localhost:30000/user/hadoop/out/part-r-00000
not a SequenceFile
         at
org.apache.hadoop.io.SequenceFile$Reader.init(SequenceFile.java:1523)
         at
org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1483)
         at
org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1451)
         at
org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1432)
         at

org.apache.hadoop.mapreduce.lib.input.SequenceFileRecordReader.initialize(SequenceFileRecordReader.java:60)


Can someone help me? Because I don't understand it. I don't know to save
my object in first M/R and how to use it in second M/R

Thanks

Joan







--
Lance Norskog
[email protected]



Reply via email to