Spark Map降低不太大的数据的性能

时间:2016-08-09 10:23:34

标签: performance apache-spark mapreduce weighted-average

我正在使用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是否适用于大数据(如数十亿数据)?有没有办法改善这种计算的性能?

0 个答案:

没有答案