This project has retired. For details please refer to its Attic page.
FloatSparseMatrixSumAggregator xref
View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  package org.apache.giraph.aggregators.matrix.sparse;
20  
21  import org.apache.giraph.aggregators.AggregatorUsage;
22  import org.apache.giraph.aggregators.matrix.MatrixSumAggregator;
23  import org.apache.giraph.master.MasterAggregatorUsage;
24  import org.apache.giraph.worker.WorkerAggregatorUsage;
25  
26  /**
27   * The float matrix aggregator is used to register and aggregate float matrices.
28   */
29  public class FloatSparseMatrixSumAggregator extends MatrixSumAggregator {
30    /** sparse vector with single entry */
31    private FloatSparseVector singletonVector = new FloatSparseVector();
32  
33    /**
34     * Create a new matrix aggregator with the given prefix name for the vector
35     * aggregators.
36     *
37     * @param name the prefix for the row vector aggregators
38     */
39    public FloatSparseMatrixSumAggregator(String name) {
40      super(name);
41    }
42  
43    /**
44     * Register the float vector aggregators, one for each row of the matrix.
45     *
46     * @param numRows the number of rows
47     * @param master the master to register the aggregators
48     */
49    public void register(int numRows, MasterAggregatorUsage master)
50      throws InstantiationException, IllegalAccessException {
51      for (int i = 0; i < numRows; ++i) {
52        master.registerAggregator(getRowAggregatorName(i),
53            FloatSparseVectorSumAggregator.class);
54      }
55    }
56  
57    /**
58     * Add the given value to the entry specified.
59     *
60     * @param i the row
61     * @param j the column
62     * @param v the value
63     * @param worker the worker to aggregate
64     */
65    public void aggregate(int i, int j, float v, WorkerAggregatorUsage worker) {
66      singletonVector.clear();
67      singletonVector.set(j, v);
68      worker.aggregate(getRowAggregatorName(i), singletonVector);
69    }
70  
71    /**
72     * Set the values of the matrix to the master specified. This is typically
73     * used in the master, to build an external FloatMatrix and only set it at
74     * the end.
75     *
76     * @param matrix the matrix to set the values
77     * @param master the master
78     */
79    public void setMatrix(FloatSparseMatrix matrix,
80        MasterAggregatorUsage master) {
81      int numRows = matrix.getNumRows();
82      for (int i = 0; i < numRows; ++i) {
83        master.setAggregatedValue(getRowAggregatorName(i), matrix.getRow(i));
84      }
85    }
86  
87    /**
88     * Read the aggregated values of the matrix.
89     *
90     * @param numRows the number of rows
91     * @param aggUser the master or worker
92     * @return the float matrix
93     */
94    public FloatSparseMatrix getMatrix(int numRows, AggregatorUsage aggUser) {
95      FloatSparseMatrix matrix = new FloatSparseMatrix(numRows);
96      for (int i = 0; i < numRows; ++i) {
97        FloatSparseVector vec = aggUser.getAggregatedValue(
98            getRowAggregatorName(i));
99        matrix.setRow(i, vec);
100     }
101     return matrix;
102   }
103 }