下午好,我目前正在使用Java和Apache的Spark,其中包含60,000多行和400多列以下结构的CSV文件:
+---+---+---+---+
| a | 0 | 2 | 4 |
| b | 1 | 4 | 6 |
+---+---+---+---+
基本上,我想计算每行的样本和流行的标准偏差。我使用以下代码,由于某种原因,只有第一行有正确的SD。
joined.javaRDD().foreach(r -> {
double[] _expressions = new double[407];
for(int i = 0; i < 407; i++) {
_expressions[i] = Double.parseDouble(r.get(i + 1).toString());
}
double sum = 0.0;
for (int i = 0; i < _expressions.length; i++) {
sum += _expressions[i];
}
double avg = sum / _expressions.length;
double sum2 = 0.0;
for (int i = 0; i < _expressions.length; i++) {
sum2 += (_expressions[i] - avg) * (_expressions[i] - avg);
}
double var = sum2 / (_expressions.length - 1);
System.out.println(Math.sqrt(var));
});
我正在使用带有10行样本的Excel进行比较,我只能看到第一行是正确的。我不认为线程安全是一个问题,但任何帮助将不胜感激。
谢谢。