2015-04-22 23 views
7

Mi piacerebbe sapere come collectAsMap funziona in Spark. Più nello specifico mi piacerebbe sapere dove si svolgerà l'aggregazione dei dati di tutte le partizioni? L'aggregazione avviene in master o in lavoratori. Nel primo caso ogni lavoratore invia i propri dati sul master e quando il master raccoglie i dati da ciascun lavoratore, il master aggregherà i risultati. Nel secondo caso i lavoratori sono responsabili di aggregare i risultati (dopo aver scambiato i dati tra di loro) e successivamente i risultati verranno inviati al master.Spark CollectAsMap

È fondamentale per me trovare un modo in cui il master sia in grado di raccogliere i dati da ciascuna partizione separatamente, senza che i lavoratori scambino dati.

+0

Nella tua terminologia Credo che si intende dire che driver e non padrone. Il driver è dove i risultati della raccolta verranno aggregati e inviati dal cluster Spark. – Rich

risposta

6

Puoi vedere come stanno facendo collectAsMap qui. Dato che il tipo RDD è una tupla, sembra che utilizzino solo il normale RDD e quindi traducano le tuple in una mappa di coppie chiave, valore. Tuttavia, nel commento affermano che la multi-mappa non è supportata, quindi è necessario un mapping chiave/valore 1-a-1 per i dati.

collectAsMap function

cosa che fa è raccogliere eseguire un lavoro Spark e tornare i risultati di ogni partizione da parte dei lavoratori e li aggrega con una fase di riduzione/concat sul driver.

collect function

Quindi, dato che, dovrebbe essere il caso che il conducente raccoglie i dati provenienti da ogni partizione separatamente senza lavoratori scambio di dati per eseguire collectAsMap.

Nota: se si eseguono trasformazioni sul RDD prima dell'uso di collectAsMap che causano la riproduzione casuale, potrebbe esserci un passaggio intermedio che consente ai lavoratori di scambiare dati tra di loro. Controlla l'interfaccia utente dell'applicazione del tuo cluster master per visualizzare ulteriori informazioni su come la scintilla sta eseguendo la tua applicazione.

1

Prima di tutto in entrambe le operazioni, tutti i dati presenti in RDD viaggeranno da diversi esecutori/lavoratori a Master/Driver. Sia la raccolta che la raccolta di AsMap raccoglieranno semplicemente i dati di vari esecutori/lavoratori. Quindi questo è il motivo per cui è sempre consigliabile non utilizzare raccogliere fino a quando non si dispone di alcuna altra opzione.

Devo dire che questa è l'ultima raccolta da considerare dal punto di vista delle prestazioni.

  1. raccolgono: restituisce i risultati come un array.
  2. collectAsMap restituirà i risultati per RDD abbinato come raccolta Mappa. E dal momento che sta restituendo la raccolta di mappe, otterrai solo coppie con chiavi e coppie univoche con chiavi duplicate che verranno rimosse.

saluti,

Neeraj