Numero di partizioni in RDD e prestazioni in Spark

In Pyspark, posso creare un RDD da un elenco e decidere quante partizioni avere:

sc = SparkContext() sc.parallelize(xrange(0, 10), 4) 

In che modo il numero di partizioni che decido di partizionare il mio RDD influenza le prestazioni? E come questo dipende dal numero di core della mia macchina?

L’effetto principale sarebbe specificando troppe poche partizioni o troppe partizioni.

Troppe poche partizioni Non utilizzerai tutti i core disponibili nel cluster.

Troppe partizioni Ci sarà un sovraccarico eccessivo nella gestione di molte piccole attività.

Tra i due il primo è molto più incisivo sulle prestazioni. Pianificare troppe piccole attività è un impatto relativamente piccolo a questo punto per i conteggi delle partizioni inferiori a 1000. Se si dispone dell’ordine di decine di migliaia di partizioni, la scintilla diventa molto lenta.

Per aggiungere all’eccellente risposta di javadba, ricordo che i documenti raccomandano di avere il numero di partizioni impostato su 3 o 4 volte il numero di core CPU nel cluster in modo che il lavoro venga distribuito in modo più uniforms tra i core della CPU disponibili. Vale a dire, se hai solo 1 partizione per core CPU nel cluster, dovrai aspettare che venga completata l’attività più lunga, ma se avessi rotto ulteriormente, il carico di lavoro sarebbe stato bilanciato in modo più uniforms con attività di esecuzione rapida e lenta. .