Spark ha variabili broadcast
, che sono di sola lettura e accumulator
, che possono essere aggiornamenti dai nodi, ma non letti. C'è un modo o una soluzione per definire una variabile che è sia aggiornabile che leggibile?Come definire una variabile di lettura/scrittura globale in Spark
Un requisito per tale variabile globale di lettura/scrittura sarebbe l'implementazione di una cache. Poiché i file vengono caricati ed elaborati come rdd, vengono eseguiti i calcoli. I risultati di questi calcoli - che si verificano in diversi nodi che corrono in parallelo - devono essere inseriti in una mappa, che ha come chiave alcuni degli attributi dell'entità in fase di elaborazione. Mentre le entità successive all'interno di rdd vengono elaborate, la cache viene interrogata.
Scala ha ScalaCache
, che è una facciata per implementazioni di cache come Google Guava
. Ma come si dovrebbe includere e accedere a tale cache all'interno di un'applicazione Spark?
La cache può essere definita come una variabile nell'applicazione driver che crea lo SparkContext
. Ma poi ci sarebbero due questioni:
- prestazioni sarebbe presumibilmente male a causa del sovraccarico di rete tra i nodi e l'applicazione del driver.
- A mio parere, a ogni rdd verrà passata una copia della variabile (cache in questo caso) quando si accede per la prima volta alla variabile dalla funzione passata a rdd. Ogni rdd dovrebbe avere la propria copia, non l'accesso a una variabile globale condivisa.
Qual è il modo migliore per implementare e archiviare una cache di questo tipo?
Grazie
Quindi qual è la domanda qui? – zero323
Come definire una lettura globale \ scrivi variabili in Spark, ad es. per definire una cache, come nel mio esempio. – user1052610
Grazie Tzach - aggiungerà un commento a questa domanda – user1052610