2016-03-29 13 views

risposta

9

Kryo non avrà un impatto significativo su PySpark perché memorizza solo i dati come oggetti byte[], che sono veloci da serializzare anche con Java.

Ma potrebbe valere la pena provare - si dovrebbe semplicemente impostare la configurazione spark.serializer e provare a non registrare alcuna classe.

Ciò che potrebbe avere un impatto maggiore è la memorizzazione dei dati come MEMORY_ONLY_SER e l'abilitazione di spark.rdd.compress, che li comprimerà i dati.

In Java questo può aggiungere un po 'sovraccarico della CPU, ma Python corre un po' più lento, quindi potrebbe non importa. Potrebbe anche velocizzare il calcolo riducendo GC o consentendo di memorizzare più dati nella cache.

Riferimento: Matei Zaharia's answer nella mailing list.

+0

Wow, una risposta dettagliata così veloce! Grazie. La parte da "Cosa potrebbe fare ..." si riferisce al serializzatore o suggerimento indipendente per l'ottimizzazione? – Gerenuk

+0

è più di un suggerimento per l'ottimizzazione poiché Kryo non avrà alcun impatto su PySpark. Suggerisco di provarlo prima. Non uso PySpark eccessivamente per testarlo e le prestazioni possono dipendere da molte cose: configurazione, casi d'uso, rete, ecc. – eliasah

4

Tutto dipende da cosa intendi quando parli di PySpark. Negli ultimi due anni, lo sviluppo di PySpark, come lo sviluppo di Spark in generale, è passato dall'API RDD di basso livello a API di alto livello come DataFrame o ML.

Queste API sono implementate in modo nativo su JVM e il codice Python è per lo più limitato a un sacco di chiamate RPC eseguite sul driver. Tutto il resto è praticamente lo stesso codice eseguito usando Scala o Java, quindi dovrebbe beneficiare di Kryo allo stesso modo delle applicazioni native.

Discuterò che alla fine della giornata non c'è molto da perdere quando si utilizza Kryo con PySpark e potenzialmente qualcosa da guadagnare quando l'applicazione dipende in gran parte dalle API "native".

Problemi correlati