Редактировать: уже решено с помощью RDD.collectAsMap()
Я пытаюсь воспроизвести решение проблемы со страниц 28-30 из http://on-demand.gputechconf.com/gtc/2016/presentation/S6424-michela-taufer-apache-spark.pdf
У меня есть HashMap, который я создаю вне функции карты. HashMap содержит следующие данные:
{1:2, 2:3, 3:2, 4:2, 5:3}
Ранее определенная RDD предыдущаяRDD имела тип:
JavaPairRDD<Integer, Iterable<Tuple2<Integer, Integer>>>
содержит данные:
1: [(1,2), (1,5)]
2: [(2,1), (2,3), (2,5)]
3: [(3,2), (3,4)]
4: [(4,3), (4,5)]
5: [(5,1), (5,2), (5,4)]
Я пытаюсь для создания нового RDD с flatMapToPair:
JavaPairRDD<Integer, Integer> newRDD = previousRDD.flatMapToPair(new PairFlatMapFunction<Tuple2<Integer, Iterable<Tuple2<Integer, Integer>>>, Integer, Integer>() {
@Override
public Iterator<Tuple2<Integer, Integer>> call(Tuple2<Integer, Iterable<Tuple2<Integer, Integer>>> integerIterableTuple2) throws Exception {
Integer count;
ArrayList<Tuple2<Integer, Integer>> list = new ArrayList<>();
count = hashMap.get(integerIterableTuple2._1);
for (Tuple2<Integer, Integer> t : integerIterableTuple2._2) {
Integer tcount = hashMap.get(t._2);
if (count < tcount || (count.equals(tcount) && integerIterableTuple2._1 < t._2)) {
list.add(t);
}
}
return list.iterator();
}
});
Но при этом hashMap.get(t._2)
внутри для l oop большую часть времени получает значения NULL. Я проверил, что правильные значения находятся внутри HashMap.
Есть ли способ правильно получить значения HashMap внутри функции Spark?