2016-04-16 1 views
0

J'utilise Scala, et je veux saveAsTextFile pour enregistrer directement les résultat comme onglet séparé, comme, par exemple:Comment générer une sortie séparée par des tabulations en utilisant saveastextfile dans Spark?

a 1 
b 4 
c 5 

(espace tab)

Je veux juste utiliser saveAsTextFile (non impression), et quand j'ai comme RDD[(String, Double)], je ne peux pas utiliser

ranks = ranks.map(f => f._1 +"\t"+f._2) 

Il dit que le type ne correspond pas, je suppose que f._1 est une chaîne et f._2 est un double?

+0

Cette réponse fournie est correcte. Veuillez l'accepter pour que nous puissions clôturer la question! – eliasah

Répondre

3

La seule erreur dans votre code tente de réattribuer le résultat de la mise en correspondance dans la même variable ranks - Je suppose ranks est de type RDD[(String, Double)] donc bien vous ne pouvez pas lui affecter une valeur de type RDD[String]. Il suffit d'utiliser une variable séparée:

val ranks: RDD[(String, Double)] = sc.parallelize(Seq(("a", 1D), ("b", 4D))) 
val tabSeparated: RDD[String] = ranks.map(f => f._1 +"\t"+f._2) 
tabSeparated.saveAsTextFile("./test.tsv") 

En général, il est presque toujours préférable d'utiliser val s et non var s pour éviter de telles erreurs.

REMARQUE: une façon peut-être plus propre pour convertir un tuple (de toute taille) dans une chaîne délimité par des tabulations:

ranks.map(_.productIterator.mkString("\t")) 
+0

Problème résolu, merci! – justr