20/10/2023
Université Mohammed V- Rabat
Ecole Mohammadia d'Ingénieurs
Département Génie Informatique
Filière Génie Informatique et Digitalisation
Traitement Big Data
Pr. N. EL FADDOULI
nfaddouli@[Link]
2023-2024
CC-BY NC SA
Chapitre 3: Les Resilient Distributed Dataset (RDD)
Présentation des RDD.
Créer, manipuler et réutiliser des RDD.
Caractéristiques des RDD.
Accumulateurs et variables broadcastées.
TP :
Manipulation de différents Datasets à l'aide de RDD et utilisation de l'API
fournie par Spark.
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 70
1
20/10/2023
RDD: Présentation
Un RDD (Resilient Distributed Dataset) est une structure de données qui permet de stocker
des données de manière répartie sur un cluster de machines, de les traiter de manière
parallèle et de tolérer les pannes de manière transparente.
Bloc1 1
Partition Bloc2 2
Partition Bloc3 3
Partition Partition
Bloc4 4 RDD
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 71
RDD: Présentation
Les RDDs forment la base du modèle de programmation de Spark et sont utilisés pour
effectuer des opérations de traitement (pipeline Spark) de données distribuées dans Spark.
Un RDD est composé des éléments suivants :
• Données sous-jacentes: Un RDD contient les données qu'on veut traiter. Elles peuvent être
de différents types (des lignes de texte, des objets Python, des valeurs numériques, etc). Les
données sont réparties sur plusieurs nœuds du cluster Spark.
• Partitions: Les données d'un RDD sont divisées en partitions (morceaux plus petits). Chaque
partition est une unité de base pour le traitement parallèle. Par exemple, dans HDFS chaque
partition d'un RDD peut correspondre à un bloc HDFS.
• Métadonnées: Ces métadonnées sont stockées dans le mémoire du Driver. On y trouve des
informations (identifiants et emplacements des partitions,…) utilisées par le Driver pour la
planifications et l'ordonnancement des tâches l'application qui manipulent ces RDDs .
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 72
2
20/10/2023
RDD: Présentation
Ces métadonnées incluent:
• Identifiants et emplacements des partitions: Ils sont utilisés pour localiser les partitions
des RDD manipulés.
• Fonction de partitionnement: Un RDD peut également inclure une fonction de
partitionnement personnalisée qui spécifie comment les données sont réparties entre les
partitions (Par exemple: partitionnement basé sur le hachage).
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 73
RDD: Présentation
• Informations de Dépendances: Informations sur les dépendances des RDD, c'est-à-dire
comment chaque RDD a été dérivé d'autres RDD. Cela permet de suivre l'ensemble du flux
de données et de garantir la tolérance aux pannes.
Ce sont des informations de Lineage ou Lignage (Lineage Information ou RDD Lineage)
qui sont un enregistrement des opérations appliquées à des données distribuées pour
produire un RDD spécifique. Ces informations permettent de récupérer les partitions de
données perdues en cas de panne de nœud.
Ces informations de lineage sont cruciales pour recalculer les partitions perdues et
garantir la tolérance aux pannes dans Spark.
Text Read Opération1 Opération2
RDD1 RDD2 RDD3
File
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 74
3
20/10/2023
RDD: Création à partir d'un fichier
On peut créer un RDD à partir du contenu d'un fichier (local, HDFS, …) chargé pour traitement
Partitions
Nous étudions Apache Spark
C'est pour le traitement Big Data
Il y a d'autres FrameWorks
RDD1
….
….
Le nombre de partitions dépend du
nombre de cœurs CPU disponibles en
local ou dans le cluster, de la
localisation et la taille des données
On peut le personnaliser dans
l'application: rdd1 = [Link](4)
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 75
RDD: Création à partir d'une liste de valeurs
On peut créer un RDD à partir de données (texte, entier, …) fixées dans l'application
Le nombre par défaut des partitions obtenues par parallelize est égal au nombre de cœurs
CPU logiques (en local)
On peut personnaliser le nombre de partitions obtenues par parlalelize en renseignant le
deuxième paramètre comme suit: rdd1 = [Link](data, 1)
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 76
4
20/10/2023
RDD: Transformations
On peut créer un nouveau RDD à partir d'un autre RDD sachant qu'on ne peut pas
modifier un RDD Un RDD est en lecture seul
Une transformation est une fonction qui permet de créer un nouveau RDD à partir d'un RDD
existant.
Exemples de transformations permettant d'obtenir un nouveau RDD:
map: appliquer une fonction à chaque élément d'un RDD pour produire un nouveau RDD.
filter: filtrer les éléments d'un RDD en fonction d'une condition donnée.
flatMap: appliquer une fonction à chaque élément du RDD pour produire un nouveau
RDD avec une liste d'éléments en sortie pour chaque élément en entrée.
sortBy: trier les éléments du RDD en fonction d'une condition donnée
union: Fusionne deux RDD en un seul.
distinct: Retourne un nouveau RDD avec des éléments uniques.
…
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 77
La transformation map(fonction)
Elle permet d'appliquer une fonction à chaque élément (ligne, tuple, objet, …) du RDD en
entrée pour créer un élément du RDD de sortie.
La fonction doit avoir un seul argument et retourne une valeur qui peut être scalaire ou
complexe (tuple, liste, …) Chaque ligne converti donnera lieu à un tableau de mots
Exemple 1:
Chaque tableau de mots
donnera lieu à un entier
(sa taille)
Le paramètre d'appel est
lambda mots: len(mots) implicitement un élément de rdd1
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 78
5
20/10/2023
La transformation map(fonction)
Exemple 2: Appliquer la transformation map pour diviser chaque ligne en mots en appliquant
une fonction anonyme (lambda) qui retourne un tableau des mots d'une ligne (argument)
Partitions Partitions
Nous étudions Apache Spark ["Nous", "étudions", "Apache", "Spark" ]
C'est pour le traitement Big Data ["C'est", "pour","le","traitement","Big","Data"]
Il y a d'autres FrameWorks ["Il","y","a","d'autres","FrameWorks"]
RDD1 RDD2
…. ….
…. ….
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 79
La transformation flatMap(fonction)
Elle permet d'appliquer une fonction à chaque élément (ligne, tuple, objet, …) du RDD en
entrée pour créer un élément du RDD de sortie.
La fonction doit avoir un seul argument et retourne une valeur qui peut être scalaire ou
Chaque ligne converti donnera lieu à un tableau de mots
complexe (tuple, liste, …)
dont chacun sera un élément du RDD de sortie
Exemple:
Chaque mot donnera
lieu à un entier (sa
taille)
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 80
6
20/10/2023
La transformation flatMap(fonction)
Exemple 2: Appliquer la transformation flatmap pour diviser chaque ligne (élément de rdd1)
en liste de mots pour avoir les éléments de rdd2 dont chacun (une liste) sera aplati pour avoir les
éléments de rdd3
Partitions
Partitions
Nous
["Nous", "étudions", "Apache", "Spark" ] Étudions
["C'est", "pour","le","traitement","Big","Data"] Apache
["Il","y","a","d'autres","FrameWorks"] RDD3 Spark
RDD2
…. …..
…. ….
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 81
La transformation reduceByKey(fonction, [numPartitions])
Les paires clé-valeur du RDD en entrée sont d'abord regroupées selon leurs clés (Shuffle)
Une fonction de réduction (Premier paramètre de reduceByKey) est ensuite appliquée à
toutes les valeurs associées à chaque clé pour avoir un élément du RDD de sortie.
Le second paramètre facultatif représente le nombre de partitions maximal à obtenir après
le shuffle: [Link]("[Link]", 16)
Exemple: La fonction de réduction doit
avoir deux arguments qui
Elément: ("Rabat",[1, 1, 1,1]) représentent deux valeurs
quelconques parmi celles
relatives à une clé.
Sortie: ("Rabat", 4)
Elément: ("Prod1",[3, 1, 2,4])
return a if a>b else b
Sortie: ("Prod1", 4)
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 82
7
20/10/2023
La transformation groupByKey([numPartitions])
C'est une opération de transformation pour grouper toutes les paires clé-valeur d'un RDD
par clé pour avoir un RDD en sortie dont les élément sont des paires clé-valeur et où la
valeur est une liste par exemple ("Ipad", [3, 4, 2])
Elle peut entraîner des problèmes de performance à case d'un déplacement important de
données sur le réseau.
Exemple:
Résultat
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 83
La transformation filter(fonction_bool)
La transformation filter crée un nouveau RDD en filtrant les éléments d'un RDD existant en
fonction d'une condition spécifiée.
Cela permet de sélectionner uniquement les éléments qui satisfont la condition.
Exemple:
Résultat
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 84
8
20/10/2023
La transformation sortByKey ([ascending=True | False])
La transformation sortByKey crée un RDD en triant les paires clé-valeur de départ par clé.
Le tri par défaut est croissant mais on peut l'indiquer avec le paramètre optionnel
ascending= True ou False.
Exemple:
Résultat
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 85
La transformation sortBy (Fonction, [ascending=True | False])
La transformation sortBy crée un RDD de sortie en triant les paires clé-valeur du RDD
d'entrée par la valeur de retour de la fonction qui peut retourner la clé, la valeur ou autre.
Le tri par défaut est croissant mais on peut l'indiquer avec le paramètre optionnel
ascending= True ou False.
Exemple:
<
Résultat
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 86
9
20/10/2023
La transformation mapPartitions (Fonction, [ascending=True | False])
La transformation mapPartitions permet d'appliquer une fonction à chaque partition de du
RDD d'entrée et non pas à chaque élément comme map.
Cela peut être plus efficace que map lorsqu'on a besoin de faire des opérations par partition
au lieu de les appliquer sur chaque élément individuel.
Exemple:
Résultat
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 87
Transformations Etroite
Il existe deux principaux types de transformations sur les RDD: Transformations étroites
(Narrow Transformations) et Transformations larges (Wide Transformations)
Les transformations étroites n'entraînent pas de réorganisation des données entre les
partitions.
Chaque partition d'entrée est utilisée pour créer au plus une partition de sortie
Ces transformations sont plus efficaces en termes de performance, car elles minimisent
le déplacement des données sur le réseau: chaque partition de sortie dépend
uniquement des données contenues dans la même partition d'entrée. Il n'est pas
garanti que la partition en entrée et celle en sortie restent sur le même nœud du cluster.
RDD1 RDD2
Exemples de transformations étroites : map, filter, …
N.B: Les partitions n'ont pas forcément la même taille.
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 88
10
20/10/2023
Transformations Etroite Narrow
Quelques transformations étroites:
map(fonction): applique fonction à chaque élément du RDD pour former un nouveau
RDD de sortie.
filter(fonction): sélectionne les éléments du RDD pour lesquels fonction retourne true et
retourne un nouveau RDD de sortie.
flatmap(fonction): similaire à map mais à chaque élément on applique fonction qui
retourne une collection d'éléments (int, string, …). Chaque collection sera ensuite
aplatie pour avoir des éléments simples du nouveau RDD en sortie.
union(autre_RDD): retourne un nouveau RDD constitué des partions du RDD en entrée
et autre_RDD.
…
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 89
Transformations Larges Wide
Les transformations larges nécessitent une réorganisation des données entre les partitions.
Plusieurs partitions d'entrée peuvent contribuer à la création d'une ou plusieurs partitions
de sortie, ce qui peut entraîner des échanges de données sur le réseau.
Les données des partitions des RDD en entrée sont combinées pour produire les partitions
du RDD en sortie (C'est similaire à Reduce dans MapReduce où Shuffle est réalisé).
Les transformations larges sont généralement plus coûteuses en termes de performance par
rapport aux transformations étroites (transfert de données entre les nœuds)
Exemples de transformations larges: distinct, groupByKey,reduceByKey, join, … etc
RDD1 RDD2
("cli1", 50)
("cli2", 30) ("cli1", [50, 10])
("cli1", 10) ("cli2", [30, 20])
("cli2", 20)
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 90
11
20/10/2023
RDD: Actions
Une action Spark est une opération finale qui déclenche le traitement des transformations
précédentes pour produire une valeur ou écrire des données.
Le résultat d'une action n'est pas un RDD, mais généralement une valeur scalaire, une liste ou
une écriture de données dans un stockage externe, tel qu'un fichier ou une base de données.
Les transformations ne seront exécutées que lorsqu'un action est lancée.
[Link]
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 91
RDD: Actions
Les résultats des actions sont récupérés par le Driver.
Voici quelques exemples d'actions courantes sur un RDD en Spark :
collect(): renvoie tous les éléments du RDD sous forme d'un tableau local.
reduce(fonction):agrège les éléments du RDD en utilisant fonction qui a deux argument et
qui retourne une valeur.
count(): renvoie le nombre d'éléments (entier) dans le RDD.
first(): renvoie le premier élément du RDD.
take(n): renvoie les premiers n éléments du RDD sous forme de tableau local.
foreach(fonction): appliquer une fonction donnée à chaque élément du RDD (pas de
nouveau RDD)
saveAsTextFile(path): enregistre le contenu du RDD dans un ou plusieurs fichiers texte d' un
répertoire (path)
…
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 92
12
20/10/2023
L'action count
Elle permet de calculer le nombre d'éléments d'un RDD
Exemple : Calculer le nombre de mots dans un fichier
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 93
L'action collect
Cette action renvoie toutes les données du RDD vers le programme driver sous forme d'un
tableau.
Cela peut entraîner un débordement de mémoire sur le driver lorsqu'on a un grand ensemble
de données.
Exemple :
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 94
13
20/10/2023
L'action saveAsTextFile
Elle permet de sauvegarder le contenu des partitions d'un RDD dans un dossier
Les partitions contiennent des tuples
(id du client, liste des montants)
Somme des valeurs
groupées dont a et b
sont des éléments.
RDD3: [('id1', 60), ('id2', 50)]
Chaque élément de RDD2 est un tuple
de clé (x[0]) et valeur (x[1]) convertie en
une liste d'entiers pour appliquer SUM
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 95
L'action foreach(fonction)
Elle permet d'appliquer une fonction sur chaque élément du RDD
Exemple :
Résultat
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 96
14
20/10/2023
L'action reduce(fonction)
Elle agrège les éléments d'un RDD en utilisant une fonction associative et commutative.
Elle combine les éléments de manière itérative pour produire un seul résultat.
Exemple :
Résultat
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 97
L'action take(n)
Elle agrège les éléments d'un RDD en utilisant une fonction associative et commutative.
Elle retourne un tableau contenant les n premiers éléments du RDD en entrée.
Exemple :
Résultat
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 98
15
20/10/2023
Les variables broadcastées (1/3)
Lorsqu'une tâche (fonction) est envoyée à un exécuteur, elle est accompagné par ses
paramètres (variables) dont la taille peut être grande.
Les variables broadcastées permettent de stocker sur chaque Worker des données en
lecture seule au lieu des les envoyer à chaque fois avec une tâche à exécuter.
Ces variables seront utilisées par les exécuteurs lors de l'exécution de plusieurs opérations.
Les tâches d'une application sur le même worker sont indépendantes: chacune a ses
propres variables dans la RAM.
Si on a donc des tâches ayant les mêmes variables, elles seront dupliquées dans la RAM
Surcharge du réseau et la RAM
Solution: les variables broadcastées
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 99
Les variables broadcastées (2/3)
On peut créer une variable broadcastée avec la méthode broadcast de l'objet SparkContext:
ref_variable = [Link](variable)
Exemple: Diffuser une variable m qui peut être un
dataset utilisé plusieurs fois dans plusieurs opérations
m
m
On libère l'espace occupé par une variable
broadcastée avec: ref_variable.destroy()
On peut supprimer la référence à une variable broadcastée
pour permettre au garbage collector de libérer l'espace
mémoire associé sur les workers : del ref_variable
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 100
16
20/10/2023
Les variables broadcastées (3/3)
Exemple:
N.B:
La propriété value permet d'avoir la Résultat
valeur d'une variable broadcastée
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 101
Les accumulateurs (1/2)
Un accumulateur est une variable partagée utilisée pour effectuer des opérations
d'agrégation parallèles de données.
Il est utilisé pour implémenter des opérations de type réduction calculant une somme ou
effectuant un comptage de manière efficace et distribuée.
On crée un accumulateur avec la méthode accumulator de l'objet SparkContext:
ref_accumulateur = [Link](val_initiale)
Une fonction qui modifiera l'accumulateur peut être appelée dans une action comme
foreach ou une transformation comme map, filter ou flatmap
N.B: Si cette fonction est appelée dans une transformation, elle ne sera exécutée que
lorsqu'il y aura une action qui déclenchera cette transformation.
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 102
17
20/10/2023
Les accumulateurs (2/2)
Exemple
Résultat
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 103
RDD: Caractéristiques
Résilient (Resilient): Les RDD peuvent tolérer les pannes, en cas de défaillance d'un nœud
du cluster, les données (partitions) perdues sont automatiquement reconstruites à partir
du lignage qui enregistre les transformations appliquées sur le RDD d'origine.
Distribué (Distributed ):Les données d'un RDD sont distribuées sur plusieurs nœuds d'un
cluster Spark. Chaque nœud stocke une partie des données, ce qui permet un traitement
parallèle.
Dataset: Un RDD est essentiellement une collection d'éléments de données. Ces éléments
peuvent être des objets Python, des valeurs numériques, des lignes de texte, etc. Un RDD
peut contenir des données structurées ou non structurées.
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 104
18
20/10/2023
RDD: Caractéristiques
Partitionné (Partitioned): Les données d'un RDD sont divisées en partitions, qui sont des
unités de base de traitement parallèle. Chaque partition est traitée indépendamment sur
un nœud du cluster. Le nombre de partitions dépend généralement du nombre de cœurs de
calcul disponibles dans le cluster.
Calcul en mémoire (In memory): les RDD sont partitionnés et calculés en mémoire.
Immuabilité ou Immutabilité (Immutability ): Les RDD sont immuables, càd qu'on ne peut
pas modifier un RDD existant. Au lieu de cela, on crée de nouveaux RDD à partir de
transformations appliquées à des RDD existants. Cela garantit la stabilité des données.
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 105
RDD: Caractéristiques
Evaluation paresseuse (Laziness): Les transformations sur un RDD sont évaluées de
manière paresseuse, càd qu'elles ne sont effectivement exécutées que lorsqu'on
déclenche une action. Les transformations sont planifiées et optimisées avant l'exécution
pour maximiser l'efficacité.
Persistance (Persistence) :On peut mettre en cache mémoire un RDD, avec persist() ou
cache(), pour accélérer l'accès ultérieur à ses éléments. Cela est particulièrement utile
pour les données fréquemment utilisées dans des itérations ou des actions répétées.
RDD2 = [Link](B)
[Link]()
MEMORY_AND_DISK, DISK_ONLY, …
[Link]([Link].MEMORY_ONLY)
Opération à grain grossier(Coarse-Grained Operation): les transformations doivent être
appliquées à l'ensemble du dataset du RDD, mais pas aux éléments individuels.
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 106
19
20/10/2023
RDD: DAG (Directed Acyclic Graph)
Le lignage (lineage) représente le plan logique d'exécution des différentes transformations
permettant d'obtenir les RDD Dépendances entre les différentes opérations Spark.
Exemple de plan logique:
parallalize filter map reduceByKey
Collection A RDD1 RDD2 RDD3 RDD4
map
parallalize filter map
Collection B RDD6 RDD7 RDD8 RDD5
join
RDD9
À l'appel d'une action, le plan logique est passé au Catalyst Optimizer qui optimise les
transformations appliquées (par réarrangement, fusion , …).
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 107
RDD: DAG (Directed Acyclic Graph)
Le plan logique optimisé est soumis ensuite au DAG Scheduler (planificateur) qui le convertit
en un plan physique d'exécution sous forme d'un Graphe Acyclique Dirigé (DAG)
Plan Plan Plan
logique
Catalyst DAG
logique Physique
(Lineage) Optimizer Final Scheduler DAG
Le DAG représente le Job à exécuter.
Un Job représente la séquence des transformations déclenchées par une action (collect(),
saveAsTextFile(), …) pour avoir un résultat.
Un job est composé de plusieurs stages (niveaux) dont chacun contient une ou plusieurs
tâches
Le DAG est utilisé aussi pour assurer la tolérance aux pannes pour récupérer les partitions en
cas d'échec d'un Worker.
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 108
20
20/10/2023
RDD: DAG (Directed Acyclic Graph)
Action Job Stages Tasks
Stage : c'est une suite de transformations qu'on peut exécuter en parallèle sur plusieurs
partitions RDD.
Un stage est une unité de parallélisme dans l'exécution d'un job.
La constitution des stages est basée sur les deux types de transformations:
Transformations étroites: transformation d'une partition sans mélange avec d'autres
partitions (sans shuffle)
Transformations larges: transformation nécessitant un mélange des données entre les
partitions (avec shuffle).
Tâche (Task): c'est l'unité fondamentale d'exécution.
Chaque partition est traitée par une tâche.
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 109
RDD: DAG (Directed Acyclic Graph)
RDD2 = [Link](…..)
RDD3 = [Link](……….)
Output = [Link]()
Transformation
large
Transformation étroite
RDD3
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 110
21
20/10/2023
RDD: DAG (Directed Acyclic Graph)
Exemple:
collect
Résultat
Le Job pour avoir le résultat de collect() ?
N.B: On peut fusionner les deux stages 1 et 3 (ou et 3) en un seul.
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 111
RDD: Quelques Limites
Par rapport à d'autres structures de données Spark, les RDD ont des limites comme:
Manque de typage fort: Les RDD sont moins axés sur le typage fort que les DataFrames. Les
erreurs liées au type de données ne sont souvent détectées qu'à l'exécution plutôt qu'à la
compilation.
N.B: On peut appliquer un map sur un RDD pour faire un cast des types de ses données.
Moins d'optimisations intégrées: Les RDD offrent moins d'optimisations intégrées du plan
logique d'exécution moins de performance.
Moins adaptés aux traitements SQL: Si on a besoin d'opérations de type SQL, les
DataFrames ou les Datasets peuvent être plus adaptés, car ils sont conçus pour fonctionner
de manière transparente avec Spark SQL et ont un schéma tabulaire.
Complexité du code: Les RDD nécessitent souvent plus de code qui peut être exprimée de
manière plus concise avec les DataFrames et Datasets à l'aide de l'API fonctionnelle et du
langage SQL intégré.
TRAITEMENT BIG DATA \ [Link] FADDOULI CC-BY NC SA 112
22