使用Java处理apache spark。我有一个JavaPairRDD RDD1,我想通过生成RDD1的值之和来创建另一个JavaPairRdd RDD2。但是,当我执行以下代码时,它会在test_3转换中阻塞,而不会出现任何错误消息。我认为这与在另一次转型中执行rdd转换或行动的问题有关。
JavaPairRDD<Key, JavaPairRDD<Integer, Double>> test_2 = test_1.mapToPair(new PairFunction<Tuple2<Key, JavaPairRDD<Integer, Double>>, Key, JavaPairRDD<Integer, Double>>() {
@Override
public Tuple2<Key, JavaPairRDD<Integer, Double>> call(Tuple2<Key, JavaPairRDD<Integer, Double>> t) throws Exception {
return new Tuple2(t._1,t._2.reduceByKey((Double val1, Double val2)
-> Math.pow(Math.abs(val1 - val2), 2)));
}
});
JavaPairRDD<Key, JavaPairRDD<Integer, Double>> test_3 = test_2.mapToPair
(new PairFunction<Tuple2<Key, JavaPairRDD<Integer, Double>>, Key, JavaPairRDD<Integer, Double>>() {
@Override
public Tuple2<Key, JavaPairRDD<Integer, Double>> call(Tuple2<Key, JavaPairRDD<Integer, Double>> t)
throws Exception {
return new Tuple2(t._1,t._2.values().reduce((Double t1, Double t2) -> t1+t2));
}});
JavaPairRDD<Key, Double> test_4= test_3.mapToPair
(new PairFunction<Tuple2<Key, JavaPairRDD<Integer, Double>>, Key, Double>() {
@Override
public Tuple2<Key, Double> call(Tuple2<Key, JavaPairRDD<Integer, Double>> t) throws Exception {
return new Tuple2(t._1,t._2.values().first());
}
});
答案 0 :(得分:0)
您的问题在test_3
之前开始。您不能将该值作为RDD。 JavaPairRDD<Key, JavaPairRDD<Integer, Double>>
您可以尝试返回tuple2(Integer,Double)列表。这样的事情:JavaPairRDD<Key, List<Tuple2<Integer, Double>>>