2017-10-11 11 views
0

J'ai essayé toutes les manières possibles en important toutes les bibliothèques possibles et en vérifiant les réponses pour toutes les questions liées à saveAstextFile ou saveAsSequenceFile n'a même pas aidé. D'où l'initiation d'un nouveau fil. Je reçois une erreur « erreur: valeur saveAsTextFile est pas membre de scala.collection.Map[String,Long] countResult.saveAsTextFile("tmp/testfile"). en essayant de sauver un RDD à HDFS je suivais les étapes ci-dessouserreur: valeur saveAsTextFile n'est pas membre de scala.collection.Map [String, Long]

1.scala> import org.apache.spark.SparkFiles 
import org.apache.spark.SparkFiles 

2.scala> val countrdd = sc.parallelize(Array("hadoop","spark","hadoop","spark")).map(k => (k,1)) 
countrdd: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[17] at map at :28 

3.scala> val countResult = countrdd.countByKey() 
countResult: scala.collection.Map[String,Long] = Map(spark -> 2, hadoop -> 2) 

4.scala> countResult.saveAsTextFile("tmp/testfile") 
:33: error: value saveAsTextFile is not a member of scala.collection.Map[String,Long] 
countResult.saveAsTextFile("tmp/testfile") 

Note:.. J'utilise la version Spark 2.X sur groupe autonome.

+0

'saveAsTextFile' peut être appliquée à un' RDD' pas une collection scala régulière. –

+0

Merci Glennie, ce que j'ai compris, c'est que nous pouvons utiliser la fonction save uniquement sur rdd créé avec la transformation et non avec des actions. – user8051251

+0

Eh bien, votre action ('countByKey') ne donne pas un résultat de type' RDD', mais plutôt une collection de scala normale de type 'Map [String, Long]' –

Répondre

2

La méthode comme saveAstextFile est disponible uniquement avec RDD. vous pouvez effectuer un nombre quelconque de transformation si elle est RDD alors vous pouvez utiliser une méthode comme celui-ci

Mais si vous aviez appliqué action comme countByKey alors la méthode comme celle-ci ne sera plus disponible.

Au lieu de countByKey vous pouvez utiliser le reduceByKey ici. Vous pouvez trouver plus de détails à propos de ce here sous la section Exemple de l'API RDD.

Ou vous pouvez essayer ce code: -

val countrdd = sc.parallelize(Array("hadoop","spark","hadoop","spark")) 
val findRDD = .map(word => (word, 1)) 
       .reduceByKey(_ + _) 

Hope this efface votre problème

Merci

+0

Merci beaucoup Akash pour la réponse rapide, c'était un grande aide. – user8051251