Standard reduce
sta assumendo una versione della funzione spostata e utilizzando mapPartitions
. Dopo che i risultati sono stati raccolti e reduced locally su un driver. Se il numero delle partizioni è grande e/o la funzione che si utilizza è costosa, pone un carico significativo su una singola macchina.
La prima fase di treeReduce
è praticamente la stessa di sopra ma dopo i risultati parziali vengono uniti in parallelo e solo l'aggregazione finale viene eseguita sul driver.
depth
è suggested depth of the tree e poiché la profondità del nodo di albero è definito come numero di bordi tra la radice e il nodo occorre voi dare più o meno un modello previsto anche se sembra un'aggregazione can be stopped early distribuito in alcuni casi.
Vale la pena notare che ciò che si ottiene con treeReduce
non è un albero binario. Il numero delle partizioni viene regolato su ciascun livello e molto probabilmente più di due partizioni verranno unite contemporaneamente.
Rispetto alla riduzione standard, versione ad albero performs reduceByKey
with each iteration e significa un sacco di dati mescolati. Se il numero delle partizioni è relativamente piccolo, sarà molto più economico utilizzare lo standard reduce
. Se si sospetta che la fase finale di reduce
sia un collo di bottiglia, la versione tree*
potrebbe valere la pena di provarla.
Come posso implementare qualcosa come nella mia foto? – member555
Se la tua immagine rappresenta le partizioni, allora per quanto posso dire i metodi di 'tree *' sono la scelta giusta. – zero323
sì, ogni blocco è una partizione. dovrei scegliere la profondità = 2? Poiché la profondità complessiva è log (num_partitions) – member555