@Override public void setup(Context context) throws IOException { Configuration conf = context.getConfiguration(); Path cMemMatrixPath = new Path(conf.get(RECONSTRUCTIONMATRIX)); Path dMemMatrixPath = new Path(conf.get(MATRIXY2X)); Path zmPath = new Path(conf.get(ZMPATH)); Path meanPath = new Path(conf.get(YMPATH)); int inMemMatrixNumRows = conf.getInt(YCOLS, 0); int inMemMatrixNumCols = conf.getInt(XCOLS, 0); ERR_SAMPLE_RATE = conf.getFloat(ERRSAMPLERATE, 1); Path tmpPath = cMemMatrixPath.getParent(); DistributedRowMatrix distMatrix = new DistributedRowMatrix(cMemMatrixPath, tmpPath, inMemMatrixNumRows, inMemMatrixNumCols); distMatrix.setConf(conf); matrixC = PCACommon.toDenseMatrix(distMatrix); distMatrix = new DistributedRowMatrix(dMemMatrixPath, tmpPath, inMemMatrixNumRows, inMemMatrixNumCols); distMatrix.setConf(conf); matrixY2X = PCACommon.toDenseMatrix(distMatrix); try { zm = PCACommon.toDenseVector(zmPath, conf); ym = PCACommon.toDenseVector(meanPath, conf); } catch (IOException e) { e.printStackTrace(); } xiCt = new DenseVector(matrixC.numRows()); sumOfErr = new DenseVector(matrixC.numRows()); sumOfyi = new DenseVector(matrixC.numRows()); sumOfyc = new DenseVector(matrixC.numRows()); }
@Override public void map(IntWritable iw, VectorWritable vw, Context context) throws IOException { if (PCACommon.pass(ERR_SAMPLE_RATE)) return; Vector yi = vw.get(); if (xi == null) xi = new DenseVector(matrixY2X.numCols()); PCACommon.sparseVectorTimesMatrix(yi, matrixY2X, xi); PCACommon.vectorTimesMatrixTranspose(xi, matrixC, xiCt); denseVectorSubtractSparseSubtractDense(xiCt, yi, zm); sumOfErr.assign( xiCt, new DoubleDoubleFunction() { @Override public double apply(double arg1, double arg2) { return arg1 + Math.abs(arg2); } }); denseVectorPlusAbsSparseVector(sumOfyi, yi); denseVectorPlusAbsDenseDiff(sumOfyc, yi, ym); }