Jan.01

Sc.textFile ou sc.wholeTextFiles [Spark]

Lors d’un projet sur le traitement de textes, vous avez le choix entre distribuer les lignes de vos fichiers ou distribuer les contenus entiers de ces derniers. L’article présente l’intérêt de chacun et la manière de le faire.

Distribuer les lignes d’un fichier

Pour distribuer les lignes d’un fichier, il faut créer un RDD[String] avec la méthode textFile() de votre instance SparkContext(). Cette méthode prend en paramètre le chemin vers le fichier en question (en local, hdfs, …). Le retour de cette méthode est un RDD[String] où chaque String correspond à une ligne de votre fichier.  Ainsi, vous distribuez votre analyse sur les lignes du fichiers.

val sc = new SparkContext(conf)
val mesLignes: RDD[String] = sc.textFile("cheminVersMonFichier")
mesLignes.map(maLigne => {
  // Traitements
})

Distribuer les fichiers d’un dossier

Si vos fichiers contiennent peu de lignes mais la complexité est situé au niveau du nombre de ces fichiers, il existe la méthode wholeTextFiles() de votre instance SparkContext(). Cette méthode prend en paramètre le chemin vers votre dossier conteneur. Le retour de cette méthode est un RDD[(String, String)]. Chaque ligne du RDD est un Tuple2. Le premier élément du Tuple2 est le chemin vers le fichier, le second son contenu. Ainsi, vous distribuez les fichiers et leur contenu en entier.

val sc = new SparkContext(conf)
val mesFichiers: RDD[(String, String)] = sc.wholeTextFiles("cheminVersMonDossierConteneur")
mesFichiers.map(unFichier => {
  println("Chemin : " + unFichier._1)
  println("Contenu : " + unFichier._2)
  // Traitements
})

A vous de décider si le meilleur moyen est de distribuer les contenus entiers des fichiers ou de boucler sur les fichiers et de distribuer les lignes de ces derniers.

Bigdata
Share this Story:
  • facebook
  • twitter
  • gplus

About lamartis

Leave a comment

Comment