2017-10-18 10 views
0

J'ai un RDD (combinerRDD) sur lequel j'appliqué ci-dessous la transformationRésultat de la transformation sur un vide RDD

JavaPairRDD<String, Integer> counts = combinerRDD.mapToPair(
      new PairFunction<Tuple2<LongWritable, Text>, String, Integer>() { 
       String filename; 
       Integer count; 
       Message message; 

       @Override 
       public Tuple2<String, Integer> call(Tuple2<LongWritable, Text> tuple) throws Exception { 
        xlhrCount = 0; 
        filename = ""; 

         filename = "New_File"; 
         for (JobStep js : message.getJobStep()) { 
          if (js.getStepName().equals(StepName.NEW_STEP)) { 
           count += 1; 
          } 
         } 

        return new Tuple2<String, Integer>(filename, xlhrCount); 
       } 
      }).reduceByKey(new Function2<Integer, Integer, Integer>() { 
           @Override 
           public Integer call(Integer count1, Integer count2) throws Exception { 
            return (count1 + count2); 
           } 
          } 
    ); 

Ma question est quand combinerRDD a des données à l'intérieur, je reçois un bon résultat quand combinerRDD .Mais est vide le résultat écrit dans HDFS est seulement un fichier _SUCCESS vide. Je m'attendais à 2 fichiers dans le cas d'une transformation sur un RDD vide, c'est-à-dire _SUCCESS et un fichier vide de la partie-00000. Ai-je raison? Combien de fichiers de sortie dois-je obtenir.

Je demande pourquoi c'est parce que j'ai obtenu un résultat différent dans 2 clusters, le code exécuté sur le cluster 1 a abouti au fichier _SUCCESS et le cluster 2 a abouti à _SUCCESS et vide partie-00000. Je suis confus maintenant. Le résultat dépend-il de la configuration du cluster?

Remarque: Je fais une jointure à gauche sur newRDD.leftOuterJoin(combinerRDD), ce qui ne me donne aucun résultat (lorsque le combineurRDD n'a que _SUCCESS) et que newRDD contient une valeur.

Répondre

0

Ok, donc j'ai trouvé une solution. J'utilise spark-1.3.0, qui a ci-dessous question: ie. une jointure externe gauche avec un videDDD donne un résultat vide.

https://issues.apache.org/jira/browse/SPARK-9236

je créais vide Paire RDD comme ci-dessous:

JavaRDD<Tuple2<LongWritable, Text>> emptyRDD = context.emptyRDD(); 
myRDD = JavaPairRDD.fromJavaRDD(emptyRDD); 

Maintenant, en utilisant:

List<Tuple2<LongWritable, Text>> data = Arrays.asList(); 
JavaRDD<Tuple2<LongWritable, Text>> emptyRDD = context.parallelize(data); 
myRDD = JavaPairRDD.fromJavaRDD(emptyRDD); 

Il travaille maintenant, à savoir mon RDD est plus vide. Le correctif est disponible dans les versions: 1.3.2, 1.4.2, 1.5.0 (lien de référence ci-dessus).