0% ont trouvé ce document utile (0 vote)
14 vues5 pages

ch3 Spark Scala

Transféré par

manarsalah070503
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
14 vues5 pages

ch3 Spark Scala

Transféré par

manarsalah070503
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 5

scala

Les outils spark sont :


- Spark Streaming : il permet d'accéder à des données en temps réel.
- Spark SQL: il permet d’interroger et modifier les données comme avec des requêtes
classiques.
- Spark MLlib pour des modèles de Machine Learning.
- GraphX pour le calcul et la création de graphes.

1. Scala

Spark est basé sur le langage scala qui est un langage de programmation orienté objet et
fonctionnel. spark scala manipule les RDDs via des instructions de transformation et
d’actions.

Création d’un RDD (Dataset)


La création d’un RDD est le résultat du chargement des données ou la transformation d’un
RDD existant.
Exemples :
1. val words = sc.textFile(“file:///home/hadoop/Downloads/words_alpha.txt")
- words est le Nom de RDD
- sc : spark context
- words contient toutes les données du fichier words_alpha.txt
2. val purchases = sc.texFile(“hdfs:///im1/purchases.txt”)
⇒ il s’agit de créer un RDD (purchases) contenant les données du fichier
purchases.txt, stocké dans le hdfs (hadoop).
sachant que purchases.txt est un fichier de données défini par les colonnes
suivantes : date, heure, store, item, cost and payment. Pour identifier les
différentes colonnes, nous pouvons le charger en tant que fichier csv en indiquant
le séparateur de colonnes.
3. val purchases_col =
spark.read.option(“delimiter”,”\t”).csv(“hdfs:///im1/purchases.txt”)

- purchase_col est un dataset formaté en colonne.


- spark.read.option().csv() : permet de charger un fichier text comme un
CSV, et ce , en indiquant le séparateur de colonne dans la partie option
de la lecture.
- afin de définir deux options d’un fichier de données telles que : le nom
de colonne et le séparateur de colonne, nous pouvons définir ces options
comme suit :

val purchases_headercol = spark.read.option(“delimiter”,”\t”).option(“header”,


“true”).csv(“hdfs:///im1/purchases.txt”)

A. Les actions

collect() Elle retourne toutes les lignes du Dataset comme un tableau au


programme driver.

exemple :

val purchases = sc.textFile(“hdfs:///im1/purchases.txt”

purchases.collect() :

count() Elle retourne le nombre de lignes du Dataset.

purchases.count() : retourne le nombre de lignes dans le RDD purchases

take(n) retourne le n premières lignes du Dataset

purchases.take() : retourne le première lignes

first() Retourner la première ligne du Dataset (équivalent à take(1) .

purchases.first() : retourne la première ligne

show(n) Afficher les n premières lignes du Dataset sous forme de tableau.


purchases.show(10) : affiche les 10 premières lignes sous forme d’un
dataframe (ligne et des colonnes)

foreach(func) Appliquer la fonction func à toutes les lignes.

purchases.foreach(println) : applique la fonction (println) pour chaque


ligne du RDD purchases

reduce(func) Agréger les éléments du Dataset en utilisant la fonction func (qui prend
2 arguments et retourne 1 résultat)

purchases.map(l=>1).reduce((a,b)=>a+b)

cette instruction scala retourne le nombre de ligne dans le dataset


purchases elle équivalente à : purchases.count().

elle est composée de :

- map(l=>1) : chaque ligne sera remplacée par 1 où l=1 est une


fonction anonyme.
- reduce((a,b)=>a+b) permet d'agréger les résultats retournés par
la fonction map.

Exercice : Soit le fichier words_alpha.txt contenant les mots en anglais.

1. Avec deux manières différentes, déterminer le nombre de mots dans ce


fichier.
2. Calculer le nombre total de caractères dans ce fichier
3. Déterminer quelle est la taille maximale des mots
4. Déterminer la taille moyenne des mots.

correction :

a. chargement des words_alpha.txt

val words =
sc.textFile(“File:///home/hadoop/Downloads/words_alpha.txt”)

1. Le nombre de mots dans words


2. _alpha.txt
a1. words.count() : retourne le nombre de mots dans le fichier
words_alpha.txt

a2. words.map(l=>1).reduce((a,b)=>a+b) : retourne le nombre de mots


dans le fichier words_alpha.txt

3. Le nombre total de de caractères dans word _alpha.txt

words.map(l=>l.length).reduce((a,b)=>a+b)

4. la taille maximale des mots

words.map(l=>l.length).reduce((a,b)=>if (a>b) a else b)

5. la taille minimale des mots

words.map(l=>l.length).reduce((a,b)=>if (a>b) b else a)

6. taille moyenne des mots

words.map(l=>l.length).reduce((a,b)=>a+b)/words.count()

B. Les transformations
filter() Retourne un nouveau RDD dont le contenu vérifiant la condition de
filtre
exemple :
- val purchasesAtlanta = purchases.filter(l=>l.contains(“Atlanta”)).
- val motseas = words.filter(l=>l.contains(“eas”))

map Elle permet d’appliquer une fonction de transformation et elle retourne


le même nombre de lignes de dataset d ‘origine.

flatmap Elle permet d’appliquer une fonction flatmap qui peut retourner
plusieurs lignes par lignes de RDD source. exemple si le RDD est est
un texte et pour compter le nombre des mots du texte.

val texte = sc.textFile(“file:///home/hadoop/Downloads/texte.txt”


mots = texte.flatmap(l=>lsplit(“ “))

union Elle permet de grouper les lignes de deux rdds.

val rddAtlanta = sc.textFile(“hdfs:///im1/purchases.txt”)


val rddVisa = sc.textFile(“hdfs:///im1/purchases.txt”)
val rddresult = rddAtlanta.union(rddVisa)

intersection Elle retourne les lignes communes de deux dataset(Rdds).

exemple
val purchases = sc.textFile(“hsdfs:///im1/purchases.txt”)
val purchasesAtlanta = purchases.filter(l=>l.contains(Atlanta”))
val purchasesBooks = purchases.filter(m=>m.contains(“Books”))
val resultIntersection = purchasesAtlanta.intersection(purchasesBooks )

l’inverse de cette commande permettant de retourner les lignes vérifiant la

distinct rdd sans doublons

join join de deux rdd selons une clé

Vous aimerez peut-être aussi