不使用迭代计算Spark RDD

时间:2016-06-20 18:08:10

标签: java apache-spark mapreduce tuples

我正在尝试实现MAP(平均平均精度),到目前为止一切正常,但是我到了需要在RDD上进行计算的阶段。 (不使用迭代,rdd.collect()不是一个选项)

这是最终生成的RDD(实际和预测的评级以及指数),我想在其上进行计算:

JavaPairRDD<Tuple2<Double, Double>, Long> actualAndPredictedSorted = actual.join(predictions).mapToPair(
                new PairFunction<Tuple2<Tuple2<Integer,Integer>,Tuple2<Double,Double>>, Double, Double>() {
                    public Tuple2<Double,Double> call(Tuple2<Tuple2<Integer,Integer>,Tuple2<Double,Double>> t) {
                        return new Tuple2 < Double, Double > (t._2._2, t._2._1);
                    }
        }).sortByKey(false).zipWithIndex();

如下图所示,您可以找到解释计算方式的图像。 例如,如果用户在rdd中的实际评级高于3/5

,则会计算一个条目(绿色视为命中)

enter image description here

我希望自己解释一下!

1 个答案:

答案 0 :(得分:0)

您需要过滤,而不是迭代。

可以通过

来实现
  1. 过滤(仅保留符合条件的评级)。
  2. 添加所有这些
  3. 按条目数除以。