gpt4 book ai didi

hadoop - 用Reducer计算和矩阵

转载 作者:行者123 更新时间:2023-12-02 22:05:35 25 4
gpt4 key购买 nike

我有一个自定义类的MW。 MW得到2个矩阵-(ke矩阵和val矩阵)。

我正在尝试汇总所有进入化简器的矩阵。

因此,我需要先解析我的字符串,然后将它们存储到2个 double 数组中。
我在reducer中得到所有的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)
{


如何在for循环之外获取 dimensions

最佳答案

是的,我解决了这个问题。

我发出了dimensions作为 reducer 的 key 。有效。

关于hadoop - 用Reducer计算和矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com