thanks Steve Loughran and Amr Shahin
Amr Shahin , i refered "
http://my.safaribooksonline.com/book/databases/hadoop/9780596521974/serialization/id3548156";
the same thing only. but my toString is not returning anything.



On Thu, Oct 31, 2013 at 5:57 PM, Amr Shahin <[email protected]> wrote:

> Check this out:
> http://developer.yahoo.com/hadoop/tutorial/module5.html#writable-notes
> It shows how to create a customer writable. If  you have "hadoop the
> definitive guide" there is a really good explanation about custom data
> types.
>
> Happy Halloween
>
>
> On Thu, Oct 31, 2013 at 3:03 PM, unmesha sreeveni <[email protected]
> >wrote:
>
> > this is my post from stackoverflow
> > but i am not getting any response.
> >
> >
> > I need to emit a 2D double array as key and value from mapper.There are
> > questions posted in stackoverflow. But they are not answered.
> > we have to create a custom datatype.but how?I am new to these custom
> > datatypes. i dnt have any idea where to start.I am doing some of the
> matrix
> > multiplication in a given dataset.and after that i need to emit the value
> > of
> >  A*Atrns which will be a matrix and Atrans*D which will also be a
> matrix.so
> > how to emit these matrices from mapper.And the value should be
> > corresponding to the key itself.I think for that we need to use
> > WritableComparable.
> >
> >
> >
> > public class MatrixWritable implements
> WritableComparable<MatrixWritable>{
> >
> > /**
> >  * @param args
> >  */
> > private double[][] value;
> >
> > public MatrixWritable() {
> >     // TODO Auto-generated constructor stub
> >       set(new double[0][0]);
> > }
> >
> > public MatrixWritable(double[][] value) {
> >     // TODO Auto-generated constructor stub
> >       this.value = value;
> > }
> >
> > public void set(double[][] value) {
> >       this.value = value;
> >  }
> >
> > public double[][] getValue() {
> >         return value;
> >  }
> >
> >  @Override
> >   public void write(DataOutput out) throws IOException {
> >      System.out.println("write");
> >      int row=0;
> >       int col=0;
> >         for(int i=0; i<value.length;i++){
> >             row = value.length;
> >             for(int j=0; j<value[i].length; j++){
> >                 col = value[i].length;
> >             }
> >         }
> >         out.writeInt(row);
> >         out.writeInt(col);
> >
> >         System.out.println("\nTotal no of observations: "+row+":"+col);
> >
> >         for(int i=0;i<row ; i++){
> >             for(int j= 0 ; j< col;j++){
> >
> >                  out.writeDouble(value[i][j]);
> >             }
> >         }
> >         //priting array
> >         for(int vali =0;vali< value.length ;vali ++){
> >             for(int valj = 0;valj <value[0].length;valj++){
> >                 System.out.print(value[vali][valj]+ "\t");
> >             }
> >             System.out.println("");
> >         }
> >
> >   }
> >
> >   @Override
> >   public void readFields(DataInput in) throws IOException {
> >       int row = in.readInt();
> >       int col = in.readInt();
> >
> >       double[][] value = new double[row][col];
> >       for(int i=0;i<row ; i++){
> >             for(int j= 0 ; j< col;j++){
> >                 value[i][j] = in.readDouble();
> >
> >             }
> >         }
> >
> >   }
> >
> >   @Override
> >   public int hashCode() {
> >
> >   }
> >
> >   @Override
> >   public boolean equals(Object o) {
> >
> >   }
> >
> >
> > @Override
> > public int compareTo(MatrixWritable o) {
> >     // TODO Auto-generated method stub
> >     return 0;
> > }
> >  @Override
> >   public String toString() {
> >
> >     return Arrays.toString(value);
> >
> >   }
> >
> >
> >
> > }
> >
> > I wrote matrix write,readfields and toString.
> >
> > 1.But my toString is not returning anything. why is it so?
> >
> > 2.How to print these values with in Reducer ?I tried doing(tried with
> > emiting only custom value- for checking)
> >
> > public class MyReducer extends
> >
> >
> > Reducer<MatrixWritable, MatrixWritable, IntWritable, Text> {
> >
> >     public void reduce(Iterable<MatrixWritable>  key,
> >             Iterable<MatrixWritable> values, Context context){
> >               for(MatrixWritable c : values){
> >
> >                 System.out.println("print value "+c.toString());
> >
> >             }
> >
> > }
> >
> > but Nothing is printing.when i tried to print value[0].length in
> toString()
> > method it showsArrayIndexOutOfBoundExcep.Am i doing any thing wrong.and i
> > also needed to print my data asmatrix so i tried
> >
> >     public String toString() {
> >
> >      String separator = ", ";
> >         StringBuffer result = new StringBuffer();
> >
> >         // iterate over the first dimension
> >         for (int i = 0; i < value.length; i++) {
> >             // iterate over the second dimension
> >             for(int j = 0; j < value[i].length; j++){
> >                 result.append(value[i][j]);
> >                 System.out.print(value[i][j]);
> >                 result.append(separator);
> >             }
> >             // remove the last separator
> >             result.setLength(result.length() - separator.length());
> >             // add a line break.
> >             result.append("\n");
> >         }
> >
> >
> >         return result.toString();
> >
> >
> >   }
> >
> > Again my output is empty. 3.Inorder to emit a key too as custom datatype
> > CompareTo is neccessary right .
> >
> > 4.so what should i include in that methods CompareTo,hashcode,equals and
> > what are these methods intended for.
> > Any Idea.Pls suggest a solution.
> >
> > --
> > *Thanks & Regards*
> > *
> > *
> > Unmesha Sreeveni U.B*
> > *
> > *Junior Developer
> > *
> > *Amrita Center For Cyber Security
> > *
> > *
> > Amritapuri.
> >
> > www.amrita.edu/cyber/
> > *
> >
>



-- 
*Thanks & Regards*
*
*
Unmesha Sreeveni U.B*
*
*Junior Developer
*
*Amrita Center For Cyber Security
*
*
Amritapuri.

www.amrita.edu/cyber/
*

Reply via email to