Vous êtes sur la page 1sur 3

TP SID45/IRT43

Big Data
Spark

RDD
RDD (Resilient Distributed Dataset) est une structure de données fondamen-
tale de Spark et c'est l'abstraction de données principale dans Apache Spark.
Les RDD sont des collections d'objets distribuées, tolérantes aux pannes et im-
muables (ce qui signie qu'une fois que vous avez créé un RDD, vous ne pouvez
pas le modier). Chaque jeu de données dans un RDD est divisé en partitions
logiques, qui peuvent être calculées sur diérents n÷uds du cluster.
En d'autres termes, les RDD sont une collection d'objets similaires aux collec-
tions/listes/dataframes en Java/Python, à la diérence que RDD est calculé sur
plusieurs processus dispersés sur plusieurs serveurs physiques.
Les RDDs supportent deux types d'opérations:
1. les transformations, qui permettent de créer un nouveau Dataset à partir
d'un Dataset existant
2. les actions, qui retournent une valeur au programme driver après avoir
exécuté un calcul sur le Dataset.
Par exemple, un map est une transformation qui passe chaque élément du
dataset via une fonction, et retourne un nouvel RDD représentant les résul-
tats. Un reduce est une action qui agrège tous les éléments du RDD en utilisant
une certaine fonction et retourne le résultat nal au programme.
Toutes les transformations dans Spark sont lazy, car elles ne calculent pas le
résultat immédiatement. Elles se souviennent des transformations appliquées à
un dataset de base (par ex. un chier). Les transformations ne sont calculées que
quand une action nécessite qu'un résultat soit retourné au programme principal.
Cela permet à Spark de s'exécuter plus ecacement.

Exemple
// Create an RDD from a text file
val data = sc . textFile ( " pg100 . txt ")
// Display the first 10 element of the RDD
data . take (10)
// Convert lines to lowercase
val lower = data . map (x => x. toLowerCase )
// Split lines into words
val words = lower . flatMap (x => x. split (" \\ s+") )
// produce the tuples ( word , 1)
val countws = words . map (x = > (x ,1) )

1
// Count all the words
val countFreq = countws . reduceByKey (_ + _)
// Swap the tuples and select the top 10
countFreq . map (x => x. swap ). top (10)

PySpark
PySpark est une bibliothèque Spark écrite en Python pour exécuter des appli-
cations Python à l'aide d'Apache Spark. En utilisant PySpark, nous pouvons
exécuter des applications en parallèle sur un cluster distribué. En d'autres ter-
mes, PySpark est une API (client) Python pour Apache Spark.

Exemple
// Create an RDD from a text file
data = sc . textFile (" pg100 . txt ")
// Display the first 10 element of the RDD
data . take (10)
// Convert lines to lowercase
lower = data . map ( lambda x : x . lower () )
// Split lines into words
words = lower . flatMap ( lambda x : x. split () )
// produce the tuples ( word , 1)
countws = words . map ( lambda x : (x ,1) )
// Count all the words
countFreq = countws . reduceByKey ( lambda x , y: x + y)
// Swap the tuples and select the top 10
countFreq . map ( lambda x : (x [1] , x [0]) ) . top (10)

DataFrame
Spark inclut une abstraction de données tabulaire appelée DataFrame. C'est
l'une des fonctionnalités les plus importantes de Spark. Cette API est utile
lorsque nous voulons gérer des données distribuées structurées et semi-structurées.
Les DataFrames stockent les données de manière plus ecace que les RDD,
car ils utilisent les capacités immuables, en mémoire, résilientes, distribuées et
parallèles des RDD, mais ils appliquent également un schéma aux données. Les
DataFrames traduisent également le code SQL en opérations RDD de bas niveau
optimisées.

Exemple
df = spark . read . format ( ' csv '). options ( header = ' true ', inferSchema = ' true '). load
( ' abc . csv ')
df . select (" firstname " , " dob " , " gender "). show ()
df . filter ( df . gender == 'M ') . show ()
df . groupBy (" gender "). count () . show ()

2
Exercices
Exercice 1
Two households , both alike in dignity ,
In fair Verona , where we lay our scene ,
From ancient grudge break to new mutiny ,
Where civil blood makes civil hands unclean .
From forth the fatal loins of these two foes
A pair of star - cross 'd lovers take their life ;
Whose misadventured piteous overthrows
Do with their death bury their parents ' strife .
The fearful passage of their death - mark 'd love ,
And the continuance of their parents ' rage ,
Which , but their children 's end , nought could remove ,
Is now the two hours ' traffic of our stage ;
The which if you with patient ears attend ,
What here shall miss , our toil shall strive to mend .

En utilisant le texte ci-dessus, répondez aux questions suivantes à l'aide de


commandes spark.
1. Acher les 5 premières lignes.
2. Diviser chaque chaîne sur des espaces en utilisant map et atMap. Acher
la diérence.
3. Acher les lignes contenant le mot love.
4. Transformer le RDD en minuscules et supprimez les ponctuations.

Exercice 2
Dans cet exercice, nous utiliserons un jeu de données fourni dans un chier csv :
u.user. Le chier comprend des informations démographiques sur un ensemble
d'utilisateurs. Il s'agit d'une liste d'identiants d'utilisateur séparés par des tab
user id | age | gender | occupation | zip code

Réponder aux questions suivantes à l'aide de commandes spark.


1. Quel est le nombre d'utilisateurs?
2. Ajouter à chaque utilisateur sa tranche d'âge. Les tranches d'âge sont les
suivantes : -10, 10-20, 20-30, 30-40, 40-50, 50-60, 60+.
3. Compter le nombre d'utilisateurs selon leur profession dans le groupe d'âge
20-30.

Vous aimerez peut-être aussi