J'essaie d'utiliser filter() à l'intérieur de map() mais j'obtiens cette exception :
Les transformations et actions RDD ne peuvent être invoquées que par le pilote, et non à l'intérieur d'autres transformations ; par exemple, rdd1.map(x => rdd2.values.count() * x) n'est pas valide car la transformation des valeurs et l'action de comptage ne peuvent pas être effectuées à l'intérieur de la transformation rdd1.map. Pour plus d'informations, voir SPARK-5063.
Je sais que spark ne permet pas les transformations/actions/RDD imbriquées, donc quelqu'un peut-il me donner une suggestion sur la façon de le faire alternativement (sans transformations ou actions imbriquées), eh bien j'ai un RDD dont les tuples sont comme :
JavaRDD< String[]> RDD
J'essaie de le mapper, en lui donnant une liste comme argument, cette liste contient des javaPairRDD tels que :
List<JavaPairRDD<String,String>> list
JavaRDD< String[]> result = RDD.map(new modifyRDD(list));
Ces lignes font référence à la fonction modifyRDD() :
public static class modifyRDD implements Function <String[], String[]> {
List<JavaPairRDD<String,String>> list;
public modifyRDD (List<JavaPairRDD<String,String>> list ){ this.list=list;}
public String [] call(String[] t) {
String[] s = t;
for (int i = 0; i < NB_TD; i++) {
int j=i;
// select the appropriate RDD from the RDDs_list to the current index
JavaPairRDD<String,String> rdd_i = list.get(i);
String previousElement=s[j];
JavaPairRDD<String,String> currentRDD = rdd_i.filter(line -> line._1().equals(previousElement));
String newElement=currentRDD.first()._2();
s[j]=newElement;
}
return (s) ;
}
}
Le problème se situe donc au niveau de cette ligne
JavaPairRDD<String,String> currentRDD = rdd_i.filter(line -> line._1().equals(previousElement));
Je vais maintenant donner un exemple, supposons que la liste contienne 2 PairRDD.
list={PairRDD1={(a,b)(c,d)},PairRDD2={(u,v)(x,y)}..}
et mon RDD que je veux mapper contient :
JavaRDD< String[]> RDD = {[a,u],[c,x],[a,x].....}
Le résultat que je souhaite obtenir se trouve après map() :
JavaRDD< String[]> result = {[b,v],[d,y],[b,y].....}