Un RDD (Resilient Distributed Dataset) è una raccolta di elementi immutabile e tollerante ai guasti che può essere distribuita tra più nodi di un cluster per essere elaborata in parallelo. Gli RDD sono la struttura di dati di base all'interno del motore di elaborazione dei dati open source Apache Spark.
Spark è stato sviluppato per risolvere le lacune di MapReduce, un modello di programmazione che suddivide una grande attività di elaborazione dei dati in attività parallele più piccole.
MapReduce può essere lento e inefficiente. Richiede replica (mantenimento di più copie dei dati in posizioni diverse), serializzazione (coordinamento dell'accesso alle risorse utilizzate da più programmi) ed elevato I/O (input/output dello storage su disco).
Spark riduce in modo specifico l'elaborazione non necessaria. Mentre MapReduce scrive dati intermedi su disco, Spark utilizza gli RDD per memorizzare i dati nella cache ed elaborarli nella memoria. Di conseguenza, l'analytics engine di Spark può elaborare i dati 10–100 volte più velocemente di MapReduce.1
Apache Spark è un motore di elaborazione dati veloce, open source e su larga scala spesso utilizzato per applicazioni di machine learning (ML) e intelligenza artificiale (AI). Spark può essere visto come un miglioramento di Hadoopo, più specificamente, del framework nativo di elaborazione dei dati di Hadoop, ovvero MapReduce.
Spark raggiunge la scalabilità distribuendo i workflow di elaborazione dei dati su grandi cluster di computer, con supporto integrato per il calcolo parallelo su più nodi e la tolleranza ai guasti.
Include application programming interface (API) per i linguaggi di programmazione comuni di data science e data engineering, tra cui Java, Python (PySpark), Scala e R.
Spark utilizza gli RDD per gestire ed elaborare i dati. Ogni RDD è suddiviso in partizioni logiche che possono essere calcolate simultaneamente su diversi nodi del cluster. Gli utenti possono eseguire 2 tipi di operazioni RDD: trasformazioni e azioni.
Spark esegue trasformazioni e azioni su RDD in memoria ed è questo il segreto della sua velocità. Spark può anche memorizzare i dati in memoria o scrivere i dati su disco per una maggiore persistenza.
I Resilient Distributed Dataset sono set di dati resilienti e distribuiti. Questo significa che:
Gli RDD sono chiamati "resilienti" perché tengono traccia delle informazioni del data lineage, affinché i dati persi possano essere ricostruiti in caso di guasto, rendendo gli RDD altamente fault-tolerant.
Come esempio di questa resilienza dei dati, consideriamo un core di esecuzione che viene perso durante l'elaborazione di una partizione RDD. Il driver rileverebbe quell'errore e quella partizione verrebbe riassegnata a un altro core di esecuzione.
Gli RDD si chiamano " distributed " perché sono suddivisi in gruppi più piccoli di dati che possono essere distribuiti su diversi nodi di calcolo ed elaborati contemporaneamente.
Oltre a queste due caratteristiche fondamentali, gli RDD hanno altre caratteristiche che contribuiscono alla loro importanza e alle loro operazioni in Spark.
Molti framework di elaborazione dei dati, e MapReduce in particolare, devono eseguire più operazioni di lettura o scrittura da sistemi storage esterni, rallentandone le prestazioni. La tecnologia RDD aiuta Apache Spark a risolvere questo problema.
Un RDD riduce l'I/O del disco eseguendo i calcoli in memoria e memorizzando i risultati intermedi delle operazioni iterative nella memoria ad accesso casuale (RAM). L'uso della computazione e dello storage in memoria rende più rapidi gli accessi e supporta l'elaborazione quasi in tempo reale.
Gli RDD possono aiutare anche a velocizzare i tempi di addestramento degli algoritmi di machine learning e l'elaborazione della big data analytics su larga scala. La computazione in memoria può ridurre il tempo necessario per accedere al data storage.
In Spark tutte le trasformazioni, ovvero le operazioni applicate per creare un nuovo RDD, sono "lazy", vale a dire che i dati non vengono caricati o calcolati immediatamente.
Le trasformazioni vengono invece tracciate su un grafico aciclico diretto (DAG) ed eseguite solo quando c'è un invito all'azione specifico per un programma driver.
Il programma driver dirige la funzione e le operazioni principali del cluster computing nei job Spark, come aggregazione, acquisizione, conteggio o memorizzazione dell'output in un file system.
Le decine di azioni e trasformazioni possibili includono aggregateByKey, countByKey, flatMap, groupByKey, reduceByKey e sortbyKey.
La valutazione lazy aiuta a ottimizzare le pipeline di elaborazione dei dati eliminando le attività di elaborazione e i calcoli non necessari.
Spark partiziona automaticamente gli RDD su più nodi così da poter elaborare enormi volumi di dati che non rientrerebbero in un singolo nodo. Per evitare la corruzione, ogni singola partizione viene memorizzata su un nodo anziché distribuita su più nodi.
Gli RDD consentono alle organizzazioni di definire il posizionamento delle partizioni di calcolo in modo che le attività possano essere eseguite vicino ai dati richiesti. Questo posizionamento aiuta ad aumentare la velocità di elaborazione.
Inoltre, il numero di esecutori (computer che eseguono attività assegnate dal driver) nel cluster può essere aumentato per migliorare il parallelismo nel sistema. Il livello di parallelismo nell'output dipende dalla quantità di partizioni nell'RDD principale.
Gli RDD possono essere creati in partizioni logiche in un cluster per consentire operazioni parallele su più nodi. Gli RDD possono essere creati da varie fonti di storage stabili, come Amazon Web Services (AWS) S3, Hadoop Distributed File System (HDFS), Apache HBase e Cassandra. Possono essere creati anche tramite linguaggi di programmazione come Scala e Python.
Spark RDD può memorizzare nella cache i set di dati in tutte le operazioni. Ogni nodo può memorizzare le partizioni che ha calcolato in memoria e riutilizzarle per azioni successive sul set di dati o sui set di dati risultanti. Questa persistenza può velocizzare notevolmente l'elaborazione.
Spark fornisce inoltre agli utenti opzioni di storage interattive, offrendo loro il controllo sulla modalità di memorizzazione dei dati. I dati possono essere memorizzati in memoria, su disco o su una combinazione di entrambi.
Gli RDD sono immutabili, ovvero non possono essere modificati dopo la creazione. L'immutabilità aiuta i dati a rimanere stabili nel tempo durante più operazioni.
Inoltre, rende più facile e sicura la condivisione dei dati tra più processi e aiuta a proteggere dai danni che possono essere causati da aggiornamenti simultanei da thread diversi.
Sebbene gli RDD siano immutabili, gli utenti possono creare nuovi RDD applicando trasformazioni a quelli esistenti, il che consente di aggiornare i set di dati senza alterare i dati originali.
L'RDD può elaborare dati strutturati e non strutturati. Durante l'elaborazione dei dati non strutturati, le informazioni possono essere ricavate da diversi tipi di database, flussi multimediali o file di testo senza bisogno di uno schema fisso né di creare un DataFrame.
Detto questo, gli utenti possono creare DataFrame in Spark, il che consente loro di utilizzare al meglio alcune ottimizzazioni per migliorare le prestazioni.
Progetta una strategia dati che elimini i silo, riduca la complessità e migliori la qualità dei dati per esperienze eccezionali di clienti e dipendenti.
Watsonx.data ti consente di scalare l'analytics e l'AI con tutti i tuoi dati, ovunque risiedano, attraverso uno storage dei dati aperto, ibrido e governato.
Sblocca il valore dei dati enterprise con IBM Consulting, creando un'organizzazione basata su insight in grado di generare vantaggi aziendali.
1 Apache Spark™, Apache Software Foundation, 20 dicembre 2024.