我正在使用Spark的PoC Map降低性能来计算超过5000到200,000个数据的加权平均值,而且看起来非常慢。所以,只是想检查我是否在做错了。这是我的设置细节 - •工人节点数:2 •CPU:每节点8个(16)
对于5000个订单,执行以下所有Map reduce操作需要大约9秒来计算加权平均值,即 (n1 * v1 + n2 * v2 + ....)/(n1 + n2 + ....)
//Calculation of sum of n*v using Map Reduce
JavaPairRDD<String, Double> jprMap = javaRDD.mapToPair(new PairFunction<Tuple2<Double, Double>, String, Double>() {
public Tuple2<String, Double> call(Tuple2<Double, Double> t) { return new Tuple2<String, Double>("Numerator", t._1*t._2); }
});
JavaPairRDD<String, Double> num = jprMap.reduceByKey(new Function2<Double, Double, Double>(){
public Double call(Double v1, Double v2) { return v1 + v2; }
});
Double numValue = num.values().first();
// Calculate sum of n using MapReduce
JavaPairRDD<String, Double> jprMapSum = javaRDD.mapToPair(new PairFunction<Tuple2<Double, Double>, String, Double>() {
public Tuple2<String, Double> call(Tuple2<Double, Double> t) { return new Tuple2<String, Double>("denominator", t._1); }
});
JavaPairRDD<String, Double> den = jprMapSum.reduceByKey(new Function2<Double, Double, Double>(){
public Double call(Double v1, Double v2) { return v1 + v2; }
});
Double denValue = den.values().first();
Double weightedAverage = numValue/denValue;
对于200,000个数据,大约需要9秒。这是预期的行为吗?这似乎很慢。 Spark是否适用于大数据(如数十亿数据)?有没有办法改善这种计算的性能?