reducer计算和矩阵

cbwuti44  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(334)

我有一个定制的班级。mw得到2个矩阵-(ke矩阵和val矩阵)。
我想把所有的矩阵汇总到减速机里。
所以我需要首先解析我的字符串,并将它们存储到2个双数组中。我得到了所有的ke矩阵和val矩阵。
但我无法总结。
任何建议。
为了得到forloop之外的和,我将它们声明为static。

public class Reducer  extends
Reducer<IntWritable, MW, Text, Text> {  
    static double[][] key;
    static double[][] value;
    public void reduce(IntWritable  keys,
            Iterable<MW> values, Context context)
            throws IOException, InterruptedException {

    for (MW c : values)
    {
        String data = c.toString();
        data = data.trim();
        String[] parts = data.split("#");
            String part1 = parts[0];
            String part2 = parts[1];
        /*
         * Parse key
         */
        String[] keyrows = part1.split(",");

        String[][] keymatrix = new String[keyrows.length][]; 
        int keyr = 0;
        for (String keyrow : keyrows) {
            keymatrix[keyr++] = keyrow.split("\\|");
        }

       double[][] ke = new double[keymatrix.length][keymatrix[0].length];
       for (int i = 0; i<keymatrix.length; i++) {
           for (int j = 0; j<keymatrix[0].length; j++) {
               ke[i][j] = Double.valueOf(keymatrix[i][j]);
        }
       }
      key = new double[ke.length][ke[0].length];

       for(int sumi = 0;sumi<ke.length;sumi++){
           for(int sumj=0;sumj<ke[0].length;sumj++){
               key[sumi][sumj] += ke[sumi][sumj];
           }
       }
    /*Parsing  value
    */      
    String[] valuerows = part2.split(",");

        String[][] valuematrix = new String[valuerows.length][]; 
        int valr = 0;
        for (String valuerow : valuerows) {
            valuematrix[valr++] = valuerow.split("\\|");
        }

       double[][] val = new double[valuematrix.length][valuematrix[0].length];
       for (int i = 0; i<valuematrix.length; i++) {
           for (int j = 0; j<valuematrix[0].length; j++) {
       val[i][j] = Double.valueOf(valuematrix[i][j]);
        }

       }

       //calculating sum for value
        value = new double[val.length][val[0].length];

       for(int sumi = 0;sumi<val.length;sumi++){
           for(int sumj=0;sumj<val[0].length;sumj++){
               value[sumi][sumj] += val[sumi][sumj];
           }
       }
                   }

System.out.println("sum 1");
        for(int diai=0;diai<key.length;diai++){
            for(int diaj=0;diaj<key[0].length;diaj++){
                System.out.print(key[diai][diaj]+"\t");

            }
            System.out.println("");

        }
    System.out.println("sum 2");
        for(int diai=0;diai<value.length;diai++){
            for(int diaj=0;diaj<value[0].length;diaj++){
                System.out.print(value[diai][diaj]+"\t");

            }
            System.out.println("");

        }

我认为问题出在

key = new double[ke.length][ke[0].length];

value = new double[val.length][val[0].length];

求和之前,我在循环中重建矩阵键和值。
它应该在循环之前构建一次,然后添加到循环中。但要做到这一点,我应该这样做

double[][] key = new double[ke.length][ke[0].length];
double[][] value = new double[val.length][val[0].length];

之前

for (MW c : values)
    {

但我怎么才能拿到 dimensions 在for循环之外?

yrdbyhpb

yrdbyhpb1#

是的,我解决了问题。
我发出了声音 dimensions 作为减速器的关键。成功了。

相关问题