Nel panorama dei motori Open source di elaborazione dei dati spicca Apache Spark il quale, attualmente almeno, sta distanziando le altre soluzioni disponibili. Il tema più ricorrente è la presunta battaglia tra Apache Spark e Apache Hadoop ma si tratta di uno scontro che avviene in una trincea tutta letterale, perché i due framework hanno peculiarità diverse e, non di rado, sono usati in modo complementare.
Fatto sta che Apache Spark è diventato leader pressoché indiscusso in tempi relativamente brevi. Sviluppato dall’Università della California (Berkeley) nel 2009, oggi è gestito dalla Apache Software Foundation e conta una comunità Open source senza uguali nel campo dei Big data.
Cos’è Apache Spark il framework di elaborazione dati ad alte prestazioni
Come già accennato, Apache Spark è un framework Open source per l’elaborazione di Big data che si presta in particolare alle applicazioni AI e Machine learning.
Può essere prelevato gratuitamente insieme a una quantità di librerie, insiemi di funzioni specializzate che rendono più immediato e mirato l’uso di Apache Spark.
Il motore di analytics vanta record di velocità che lo smarca di diverse misure dalla concorrenza. Infatti, una delle prerogative di Spark è la scalabilità che permette di distribuire il carico di lavoro tra cluster, un parallelismo che – almeno in parte – contribuisce a fare di Apache Spark un framework veloce.
Mette a disposizione API per diversi linguaggi di programmazione usati da Data scientist e analisti in genere, tra i quali Java, Python, R e Scala.
Quindi, laddove occorre una notevole potenza di calcolo, Apache Spark trova una collocazione specifica. Supporta anche ambienti SQL, lo streaming di dati e l’elaborazione di grafi. È usato da aziende di grandissime dimensioni quali, per esempio, Apple, Meta e Microsoft ma si presta a tutte le organizzazioni che fanno ampiamente ricorso ai dati.
Le potenzialità di Apache Spark per l’elaborazione batch e in tempo reale
Grazie agli algoritmi integrati e alla disponibilità di librerie ed estensioni, Apache Spark consente di caricare grandi quantità di dati che possono essere interrogati in modo continuo. Ci sono estensioni come Spark Streaming che favoriscono l’elaborazione scalabile, in grado di alimentare database e dashboard ai fini delle analytics e avvantaggiando quindi l’elaborazione in tempo reale.
Il cuore stesso di Spark si sviluppa attorno all’idea di Resilient Distributed Dataset (RDD), la suddivisione in cluster di calcolo che consente l’esecuzione di batch paralleli i quali, a loro volta, consentono elaborazioni di dati scalabili e veloci.
L’astrazione RDD si eleva nella trasformazione dell’elaborazione dei dati in un Directed Acyclic Graph (DAG), il meccanismo secondo cui Spark pianifica su quali nodi e in quale ordine svolgere i propri compiti.
Può apparire un concetto complicato ma è reso più semplice dalla facilità d’uso: gli RDD possono essere creati da file di testo o da database SQL e NoSQL.
Apache Spark per l’analisi dei dati: casi d’uso e best practice
Partendo dal presupposto che Apache Spark è un framework che si presta all’elaborazione dei Big data, i casi d’uso si estendono a una varietà di finalità.
Partendo dal comparto finanziario, Apache Spark può essere alleato nella prevenzione delle frodi e nella gestione del rischio, accedendo a dati provenienti da diverse fonti esterne e scoprire o rilevare modelli potenzialmente pericolosi.
Il commercio e il marketing, soprattutto se declinati all’online, possono essere supportati esaminando in tempo reale il sentiment dei clienti e proporre le strategie opportune in tutta rapidità. Ciò si estende anche alla pubblicità mirata tenendo conto degli interessi e degli acquisti dei singoli. I sistemi di recommendation fanno ampio uso di Apache Spark: tra questi spicca TripAdvisor che confronta migliaia di siti web per rendere informati i propri utenti.
Nell’industria del gaming e dei motori AI, Apache Spark può gestire la difficoltà crescente con l’avanzare dei livelli di gioco e, più in generale, può adattare la complessità di un contesto applicativo sulla scorta di parametri oggettivi.
Apache Spark viene usato anche per l’addestramento dei Large Language Model (LLM).
Apache Spark e l’apprendimento automatico: accelerare i processi di Machine learning
La libreria per l’apprendimento automatico MLib è utile alle tecniche di Machine learning e di analisi dei dati su vasta scala. Si tratta di un framework che facilita l’estrazione di caratteristiche da qualsiasi set di dati strutturato creando pipeline personalizzate.
A ciò si aggiungono prodotti che fanno parte della comunità di Apache Spark come, per esempio, MLflow (di Databricks) che fornisce funzionalità MLOps e tecniche di gestione degli addestramenti continui e del monitoraggio di sistemi di Machine learning.
MLlib fornisce algoritmi di apprendimento che consentono classificazione, clustering, riduzione dimensionale e regressione.
Come integrare Apache Spark con un ambiente di dati esistente
Apache Spark consente di creare connettori, oltre a metterne a disposizione una quantità per l’integrazione di dati provenienti dai database relazionali più diffusi.
Alcuni parametri fondamentali da fornire in fase di integrazione sono:
- Spark Server Type, specifica l’istanza alla quale è opportuno connettersi
- Host (IP), indirizzo oppure nome del server Spark
- Port, la porta usata dall’istanza del server Spark
- Database, il nome del database di riferimento
- Authentication, il meccanismo di autenticazione (ce ne sono di diversi tipi).
Diversi provider di servizi cloud, tra i quali Microsoft e Amazon Web Services, favoriscono l’integrazione mediante procedure guidate alla portata anche di chi non ha conoscenze approfondite.
Apache Spark e l’elaborazione dei dati in streaming
A partire dalla versione 3.0 di Apache Spark l’API Structured Streaming è la più consigliata per gestire i dati in streaming e, di fatto, ha sostituito la precedente Spark Streaming.
Pensata per facilitare gli sviluppatori nella creazione di dataframe e dataset in streaming infinito, Structured Streaming consente di combinare più flussi e tabelle da una fonte streaming.
I dataframe, lo specifichiamo per i non addetti ai lavori, sono le API più comuni e rappresentano una tabella di dati con righe e colonne. Ci sono altre API e continueranno a essere supportate ma Structured Streaming è il metodo eletto dalla comunità.
Scalabilità e prestazioni di Apache Spark
Una delle peculiarità più apprezzate di Apache Spark è quella di potere scalare da un singolo nodo (un server) fino a cluster con migliaia di nodi e questo consente la gestione di grandi moli di dati. La funzionalità di scalabilità automatica permette di aumentare e ridurre il numero di nodi all’occorrenza.
Le prestazioni possono essere ottimizzate in diversi modi, cominciando dall’uso di RDD a cui abbiamo accennato sopra e che consente di lavorare con i dati in modo più efficiente rispetto ai già citati dataframe.
Parallelamente, la configurazione appropriata e quindi più redditizia in termini di performance consiste nel regolare la quantità di memoria e il numero di core del server e, non da ultimo, è possibile usare un framework di ottimizzazione. Spark ha sviluppato Tungsten che riduce la garbage collection (letteralmente la raccolta dei rifiuti, ovvero l’ottimizzazione della memoria) migliorando le prestazioni.
Il partizionamento dei dati facilita la corretta distribuzione dei carichi di lavoro, mentre l’uso della cache tende a ridurre i tempi necessari all’elaborazione salvando i dati per poi essere usati successivamente.
Apache Spark nell’era del big data per gestire grandi volumi di dati
I dati generano sfide operative e più informazioni si hanno (Big data) più occorre avere gli strumenti appropriati per elaborarle ed estrarne valore e indicazioni. Raccogliere dati è semplice, saperne fare uso è affare ben più complicato e Apache Spark non è soltanto uno dei punti di riferimento per l’elaborazione dei Big data, sta diventando lo strumento per antonomasia.
Non a caso la documentazione utile all’uso di Spark è in continua evoluzione e curata da voci esperte. Mettere a disposizione un framework facile da installare e da usare e, allo stesso tempo, capace di aiutare gli sviluppatori e i Data scientist è un obiettivo necessario e condivisibile a cui lavora tutta la community di Apache Spark.
La posizione di Spark sarà sempre più solida nel panorama degli Open source e le migliaia di istallazioni attive, alcune in capo alle organizzazioni più grandi del mondo, sono ottime referenze per l’elaborazione e l’analisi dei Big data.
Apache Spark vs altri framework: confronto delle prestazioni
Spark viene spesso accostato ad Hadoop e, più precisamente, al suo componente per l’elaborazione dei dati MapReduce. La differenza sostanziale è che Apache Spark elabora e mantiene i dati in memoria (fa caching per le esigenze di elaborazione successive) e, giacché non accede ai dischi fissi in lettura e scrittura, raggiunge velocità maggiori.
Un altro confronto che si fa spesso è quello tra Spark dataframe e Pandas dataframe. Questo perché i dataframe rappresentano il concetto di tabelle di dati organizzati in righe e colonne che sono un riferimento condiviso dai linguaggi di programmazione.
Pandas è una libreria Open source di Python e, in effetti, porta con sé alcuni vantaggi tra i quali la manipolazione (quindi l’aggiornamento e persino la cancellazione) delle colonne di dati ma, parallelamente, tale manipolazione diventa vieppiù complessa con l’aumentare della quantità di dati.
Dal canto suo, Spark dataframe è un sistema dedito alla clusterizzazione e che, al contrario di Pandas, opera con le grandi moli di dati e, benché sia accompagnato da una quantità di algoritmi, offre operatori di alto livello e supporta lo streaming di dati, il Machine learning e le query SQL.