Apache Spark
# Apache Spark

Apache Spark è un framework open source per il calcolo distribuito sviluppato dall'AMPlab della Università della California e successivamente donato alla Apache Software Foundation.

## Descrizione

A differenza del paradigma MapReduce, basato sul disco a due livelli di Hadoop, le primitive "in-memory" multilivello di Spark forniscono prestazioni fino a 100 volte migliori per talune applicazioni. Ciò permette ai programmi utente di caricare dati in un gruppo di memorie e interrogarlo ripetutamente, Spark è studiato appositamente per algoritmi di apprendimento automatico.

Spark richiede un gestore di cluster e un sistema di archiviazione distribuita. Per il primo supporta nativamente un cluster Spark (modalità "standalone", in cui è possibile lanciare un cluster manualmente o tramite appositi script di lancio), ma anche Hadoop YARN, o Apache Mesos, per il secondo Spark può interfacciarsi con Hadoop Distributed File System (HDFS), Apache Cassandra , OpenStack Swift, Amazon S3, Apache Kudu, ma anche soluzioni personalizzabili. Spark supporta anche soluzioni pseudo-distribuite in modalità locale, usate di solito per lo sviluppo o scopo di test, dove l'archiviazione distribuita non è richiesta e si usa il file system locale; in tale scenario, Spark è eseguito su una macchina singola.

L'8 febbraio 2020 è stata rilasciata la versione 2.4.5 di Apache Spark.

### Le interfacce

Le prime interfacce che sono state sviluppate per l'uso di Apache Spark sono gli insiemi di dati con capacità di recupero (in inglese Resilient Distributed Dataset, RDD). Queste interfacce hanno i controlli sui tipi, ma non sono ottimizzate.

Successivamente, sono state introdotte altre interfacce, dette intelaiature di dati (in inglese data frame) che possono essere ottimizzate dal motore di Apache Spark ed hanno delle prestazioni nettamente superiori, ma non hanno i controlli sui tipi di dato. Questo comporta la possibilità di avere molteplici errori a runtime.

Le interfacce più recenti sono dette insiemi di dati (in inglese data set) e cercano di coniugare l'ottimizzazione ed i controlli sui tipi al momento della compilazione.

