Ho un piccolo programma Scala che gira bene su un nodo singolo. Tuttavia, lo sto ridimensionando in modo che venga eseguito su più nodi. Questo è il mio primo tentativo del genere. Sto solo cercando di capire come funzionano gli RDD in Spark, quindi questa domanda si basa sulla teoria e potrebbe non essere corretta al 100%.Spark RDD's - come funzionano
Diciamo che creare un RDD: val rdd = sc.textFile(file)
Ora, una volta l'ho fatto, vuol dire che il file in file
è ora diviso tra i nodi (assumendo tutti i nodi hanno accesso al percorso del file) ?
In secondo luogo, voglio contare il numero di oggetti nel RDD (abbastanza semplice), però, ho bisogno di usare quel numero in un calcolo che deve essere applicata agli oggetti nel RDD - un esempio di pseudocodice:
rdd.map(x => x/rdd.size)
Diciamo ci sono 100 oggetti rdd
, e dicono che ci sono 10 nodi, quindi un conteggio di 10 oggetti per nodo (supponendo che questa sia il concetto funziona RDD), ora quando chiamo il metodo è ciascun nodo andando eseguire il calcolo con rdd.size
come 10
o 100
? Perché, nel complesso, l'RDD è la dimensione 100
ma localmente su ciascun nodo è solo 10
. Devo eseguire una variabile di trasmissione prima di eseguire il calcolo? Questa domanda è collegata alla domanda seguente.
Infine, se eseguo una trasformazione su RDD, ad es. rdd.map(_.split("-"))
, e quindi volevo il nuovo size
del RDD, è necessario eseguire un'azione sull'RDD, ad esempio count()
, in modo che tutte le informazioni vengano inviate al nodo del driver?
'Questa domanda è collegata alla domanda seguente.' -> ?? – gsamaras
Penso che intendessi 'rdd.flatMap (_. Split (" - "))' – lovasoa