2016-07-17 112 views
8

ho lanciato un lavoro scintilla con queste impostazioni (tra gli altri):Perché è possibile avere "risultati serializzati di n attività (XXXX MB)" maggiore di `spark.driver.memory` in pyspark?

spark.driver.maxResultSize 11GB 
spark.driver.memory   12GB 

ero il debug il mio pyspark lavoro, ed è tenuto a darmi l'errore:

serialized results of 16 tasks (17.4 GB) is bigger than spark.driver.maxResultSize (11 GB) 

Così, ho aumentato la spark.driver.maxResultSize a 18 G nelle impostazioni di configurazione. E ha funzionato !!

Ora, questo è interessante perché in entrambi i casi SMALLER rispetto ai risultati serializzati restituiti.

Perché è consentito? Suppongo che questo non sia possibile perché i risultati serializzati erano quando eseguivo il debug, che è maggiore della dimensione del driver, che è 12 GB, come mostrato sopra?

Com'è possibile?

+0

Solo curioso - Perché il downvote? – simple

risposta

0

La mia comprensione è che quando chiediamo a Spark di eseguire un'azione, i risultati di tutte le partizioni sono serializzati, ma questi risultati non devono essere inviati al driver, a meno che non venga eseguita un'operazione come ad esempio collect().

spark.driver.maxResultSize definisce un limite sulla dimensione totale dei risultati serializzati di tutte le partizioni & è indipendente dall'effettivo spark.driver.memory. Pertanto, il tuo spark.driver.memory potrebbe essere inferiore al tuo spark.driver.maxResultSize e il tuo codice funzionerebbe ancora.

Probabilmente potremmo avere un'idea migliore se ci comunichi le trasformazioni e le azioni utilizzate in questo processo o il tuo frammento di codice.

1

È possibile perché spark.driver.memory configura il processo del driver JVM non nell'interprete Python e i dati tra di essi vengono trasferiti con i socket e il processo del driver non deve conservare tutti i dati in memoria (non convertire la struttura locale).

Problemi correlati