La définition dit:
RDD est une collection immuable d'objets distribués
Je ne comprends pas bien ce que cela signifie. Est-ce comme les données (objets partitionnés) stockées sur le disque dur? Si oui, alors pourquoi les RDD peuvent avoir des classes définies par l'utilisateur (comme Java, scala ou python)
A partir de ce lien: https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch03.html Il mentionne:
Les utilisateurs créent des RDD de deux manières: en chargeant un jeu de données externe ou par distribuer une collection d'objets (une liste ou un ensemble, par exemple) dans leur fichier programme de conduite
Je suis vraiment confus de comprendre RDD en général et par rapport à spark et hadoop.
Puis-je avoir une aide s'il vous plait.
Un RDD est essentiellement la représentation Spark d'un ensemble de données, réparties sur plusieurs machines, avec des API pour vous permettre de les utiliser. Un RDD peut provenir de n’importe quelle source de données, par exemple fichiers texte, une base de données via JDBC, etc.
La définition formelle est:
Les RDD sont des structures de données parallèles tolérantes aux pannes qui permettent aux utilisateurs conserver explicitement les résultats intermédiaires en mémoire, contrôler leur partitionnement pour optimiser le placement des données et les manipuler à l'aide d'un fichier riche ensemble d'opérateurs.
Pour en savoir plus sur ce qu’est un RDD, lisez l’un des documents académiques principaux de Spark, Jeux de données distribués résilients: une abstraction à tolérance de pannes pour le calcul en cluster en mémoire
RDD est une référence logique d'une dataset
qui est partitionnée sur de nombreux ordinateurs serveurs du cluster. RDD s sont immuables et sont récupérés d'eux-mêmes en cas d'échec.
dataset
pourrait être les données chargées de manière externe par l'utilisateur. Il peut s'agir d'un fichier JSON, d'un fichier csv ou d'un fichier texte sans structure de données spécifique.
UPDATE: Here est l'article qui décrit les internes de RDD:
J'espère que cela t'aides.
Formellement, un RDD est une collection d'enregistrements partitionnée en lecture seule. Les RDD ne peuvent être créés que par des opérations déterministes sur (1) des données stockées de manière stable ou (2) d'autres RDD.
Les RDD ont les propriétés suivantes -
Immutabilité et partitionnement: Les RDD composés d'une collection d'enregistrements partitionnés. La partition est l’unité de base du parallélisme dans un RDD, et chaque partition est une division logique des données qui est immuable et créée au moyen de certaines transformations sur des partitions existantes.
Les utilisateurs peuvent définir leurs propres critères de partitionnement en fonction des clés sur lesquelles ils souhaitent joindre plusieurs ensembles de données, si nécessaire.
Opérations à grains grossiers: Les opérations à grains grossiers sont des opérations qui s'appliquent à tous les éléments des jeux de données. Par exemple, une opération de mappage, de filtrage ou de groupBy sera effectuée sur tous les éléments d’une partition de RDD.
Tolérance aux pannes: Etant donné que les RDD sont créés sur un ensemble de transformations, il enregistre ces transformations plutôt que des données réelles. Le graphe de ces transformations pour produire un RDD est appelé graphe de lignage.
Par exemple -
firstRDD=sc.textFile("hdfs://...")
secondRDD=firstRDD.filter(someFunction);
thirdRDD = secondRDD.map(someFunction);
result = thirdRDD.count()
Si nous perdons une partition de RDD, nous pouvons rejouer la transformation de cette partition dans la lignée pour obtenir le même calcul, plutôt que de répliquer les données sur plusieurs nœuds. dans la gestion des données et la réplication et permet ainsi des calculs plus rapides.
Évaluations paresseuses: Spark calcule les RDD paresseusement la première fois qu’ils sont utilisés dans une action, de manière à pouvoir acheminer les transformations en pipeline. Ainsi, dans l'exemple ci-dessus, RDD sera évalué uniquement lorsque l'action count () est invoquée.
Persistance: Les utilisateurs peuvent indiquer les RDD qu’ils vont réutiliser et choisir une stratégie de stockage pour eux (par exemple, stockage en mémoire ou sur disque, etc.)
Ces propriétés des RDD les rendent utiles pour les calculs rapides.
Resilient Distributed Dataset (RDD) est la façon dont Spark représente les données. Les données peuvent provenir de différentes sources:
RDD en relation avec Spark
Spark est simplement une implémentation de RDD.
RDD en relation avec Hadoop
La puissance de Hadoop réside dans le fait qu’il permet aux utilisateurs d’écrire des calculs parallèles sans se soucier de la répartition du travail et de la tolérance aux pannes. Cependant, Hadoop est inefficace pour les applications qui réutilisent des résultats intermédiaires. Par exemple, les algorithmes d'apprentissage automatique itératifs, tels que le PageRank, la classification K-means et la régression logistique, réutilisent les résultats intermédiaires.
RDD permet de stocker des résultats intermédiaires dans la RAM. Hadoop devrait l'écrire sur un système de stockage externe stable, qui génère des E/S de disque et une sérialisation. Avec RDD, Spark est jusqu'à 20 fois plus rapide que Hadoop pour les applications itératives.
Les transformations appliquées à un RDD sont à grain grossier. Cela signifie que les opérations sur un RDD sont appliquées à l'ensemble de données, pas à ses éléments individuels. Par conséquent, les opérations comme map, filter, group, reduction sont autorisées, mais les opérations comme set (i) et get (i) ne le sont pas.
L'inverse de gros grain est fin. Un système de stockage à granularité fine serait une base de données.
Les RDD sont tolérants aux pannes, une propriété qui permet au système de continuer à fonctionner correctement en cas de défaillance de l'un de ses composants.
La tolérance aux pannes de Spark est fortement liée à sa nature à grain grossier. Le seul moyen d'implémenter la tolérance de panne dans un système de stockage à granularité fine est de répliquer ses données ou de mettre à jour les mises à jour des journaux sur plusieurs ordinateurs. Cependant, dans un système à grain grossier tel que Spark, seules les transformations sont consignées. Si une partition d'un RDD est perdue, ce dernier dispose d'assez d'informations pour le recalculer rapidement.
Le RDD est "distribué" (séparé) dans les partitions. Chaque partition peut être présente dans la mémoire ou sur le disque d'une machine. Lorsque Spark souhaite lancer une tâche sur une partition, il l'envoie à la machine contenant la partition. Ceci est connu sous le nom de "planification locale".
Sources: Excellents articles de recherche sur Spark: http://spark.Apache.org/research.html
Inclure le document suggéré par Ewan Leith.
RDD = Jeu de données distribué résilient
Résilient (signification dans le dictionnaire) = (d'une substance ou d'un objet) capable de se remettre en forme ou de reprendre forme après avoir été plié, étiré ou comprimé
RDD est défini comme suit (à partir de LearningSpark - OREILLY): La capacité de toujours recalculer un RDD est en fait la raison pour laquelle les RDD sont appelés «résilients». Lorsqu'un ordinateur contenant des données RDD échoue, Spark l'utilise pour recalculer les partitions manquantes, de manière transparente pour l'utilisateur. .
Cela signifie que les «données» sont sûrement disponibles à tout moment. De plus, Spark peut s'exécuter sans Hadoop et les données ne sont donc PAS répliquées. L'une des meilleures caractéristiques de Hadoop 2.0 est «Haute disponibilité» à l'aide de Passive Standby Namenode. Le même résultat est obtenu par RDD dans Spark.
Un RDD (données) donné peut s'étendre sur différents nœuds d'un cluster Spark (comme dans un cluster basé sur Hadoop).
Si un nœud tombe en panne, Spark peut recalculer le RDD et charger les données dans un autre nœud, et les données sont toujours disponibles . Spark tourne autour du concept d'un ensemble de données réparties résilient, -tolerant collection d'éléments pouvant être utilisés en parallèle ( http://spark.Apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds )
Pour comparer RDD avec la collection scala, voici quelques différences
RDD (R esilient D istributed D atasets) sont une abstraction permettant de représenter des données. Ils constituent officiellement une collection d'enregistrements partitionnée en lecture seule qui fournit une API pratique.
RDD fournit une solution performante pour le traitement de grands ensembles de données sur des infrastructures de calcul en cluster telles que MapReduce en abordant certains problèmes clés:
Les RDD ont deux limitations principales:
L'un des avantages conceptuels des RDD réside dans le fait qu'ils rassemblent les données et le code, ce qui facilite la réutilisation des pipelines de données.
Sources: Jeux de données distribués résilients: une abstraction à la tolérance de pannes pour le calcul en cluster en mémoire , Une architecture pour le traitement rapide et général de données sur de grands clusters
RDD est un moyen de représenter des données dans spark. La source de données peut être JSON, un fichier texte CSV ou une autre source. RDD est tolérant aux pannes, ce qui signifie qu’il stocke les données sur plusieurs emplacements (c’est-à-dire que les données sont stockées sous forme distribuée). Ainsi, en cas de défaillance d’un nœud, les données peuvent être récupérées. Cependant, les RDD sont lents et difficiles à coder et sont donc obsolètes . Il a été remplacé par le concept de DataFrame et Dataset.