2014-10-09 8 views
24

Ho difficoltà a trovare nelle operazioni di documentazione Spark che causano un shuffle e operazioni che non lo fanno. In questa lista, quali causano uno shuffle e quali no?Quali sono le trasformazioni Spark che causano uno Shuffle?

La mappa e il filtro no. Tuttavia, non sono sicuro con gli altri.

map(func) 
filter(func) 
flatMap(func) 
mapPartitions(func) 
mapPartitionsWithIndex(func) 
sample(withReplacement, fraction, seed) 
union(otherDataset) 
intersection(otherDataset) 
distinct([numTasks])) 
groupByKey([numTasks]) 
reduceByKey(func, [numTasks]) 
aggregateByKey(zeroValue)(seqOp, combOp, [numTasks]) 
sortByKey([ascending], [numTasks]) 
join(otherDataset, [numTasks]) 
cogroup(otherDataset, [numTasks]) 
cartesian(otherDataset) 
pipe(command, [envVars]) 
coalesce(numPartitions) 

risposta

29

In realtà è estremamente facile da trovare, senza la documentazione. Per ognuna di queste funzioni è sufficiente creare un RDD e chiamare la stringa di debug, ecco un esempio che puoi fare per conto tuo.

scala> val a = sc.parallelize(Array(1,2,3)).distinct 
scala> a.toDebugString 
MappedRDD[5] at distinct at <console>:12 (1 partitions) 
    MapPartitionsRDD[4] at distinct at <console>:12 (1 partitions) 
    **ShuffledRDD[3] at distinct at <console>:12 (1 partitions)** 
     MapPartitionsRDD[2] at distinct at <console>:12 (1 partitions) 
     MappedRDD[1] at distinct at <console>:12 (1 partitions) 
      ParallelCollectionRDD[0] at parallelize at <console>:12 (1 partitions) 

Così come si può vedere distinct crea un shuffle. È anche particolarmente importante scoprire questo modo piuttosto che i documenti perché ci sono situazioni in cui uno shuffle sarà richiesto o non richiesto per una determinata funzione. Ad esempio, unirsi di solito richiede un shuffle, ma se si uniscono due RDD, quel ramo della stessa scintilla RDD può a volte escludere il shuffle.

+6

E 'solo un generale buon punto sulla programmazione in realtà - cercare di rispondere alle domande attraverso la lettura del codice e utilizzando il codice sopra la documentazione lettura. La documentazione può spesso contenere la duplicazione di informazioni e con la duplicazione derivano errori e perdita di informazioni. Durante la lettura del codice, si può sapere * esattamente * cosa sta succedendo :) – samthebest

+0

Secondo la documentazione, 'toDebugString' restituisce" Una descrizione di questo RDD e delle sue dipendenze ricorsive per il debug. " Quindi includerà possibili mescolanze da trasformazioni precedenti, se esistono, anche se la trasformazione più recente non incorre in shuffle, giusto? –

0

Ecco la dichiarazione generalizzata sulle trasformazioni mischiare.

Trasformazioni che possono causare un riordino includono ripartizione operazioni come repartition e coalesce, ‘ByKey operazioni (tranne per il conteggio) come groupByKey e reduceByKey e uniscono operazioni come cogroup e join.

source

Problemi correlati