Пример #1
0
 @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());
 }
Пример #2
0
    @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);
    }