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 <unmeshab...@gmail.com>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/ > * >