2015-09-10 4 views
7

Io lavoro in un cluster in cui non ho il permesso di modificare il file log4j.properties per interrompere la registrazione delle informazioni durante l'utilizzo di pyspark (come spiegato nella prima risposta here.) La seguente soluzione, come spiegato nella prima risposta della domanda sopra, funziona scintilla scocca (Scala)Come disattivare INFO dai log in PySpark senza modifiche a log4j.properties?

import org.apache.log4j.Logger 
import org.apache.log4j.Level 

Ma scintilla con python (cioè pyspark), non ha funzionato né il seguente

Logger.getLogger("org").setLevel(Level.OFF) 
Logger.getLogger("akka").setLevel(Level.OFF) 

Come posso interrompere la stampa dettagliata di informazioni in pyspark SENZA modificare il file log4j.properties?

risposta

13

Ho usato sc.setLogLevel("ERROR") perché non ho avuto accesso in scrittura ai file di log4j.properties del nostro cluster. Da docs:

Control our logLevel. This overrides any user-defined log settings. Valid log levels include: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN

+0

Bello, grazie! :) – mbh86

+0

Perché questa soluzione non funziona per me? sc.setLogLevel ("Error") Traceback (chiamata più recente scorso): file "", linea 1, in AttributeError: oggetto 'SparkContext' non ha alcun attributo 'setLogLevel' –

+0

@Julian Cienfuegos Che strano. Stai usando Pyspark? Quale versione? Puoi chiamare altre funzioni con il tuo oggetto SparkContext, come 'sc.textFile'? L'output di 'dir (sc)' stampa tutte le funzioni di SparkContext [elencate nell'API] (http://spark.apache.org/docs/latest/api/python/pyspark.html#pyspark.SparkContext) ? –

1

da https://stackoverflow.com/a/32208445/3811916:

logger = sc._jvm.org.apache.log4j 
logger.LogManager.getLogger("org").setLevel(logger.Level.OFF) 
logger.LogManager.getLogger("akka").setLevel(logger.Level.OFF) 

fa il trucco per me. Questo è essenzialmente come è fatto all'interno PySpark's own tests:

class QuietTest(object): 
    def __init__(self, sc): 
     self.log4j = sc._jvm.org.apache.log4j 

    def __enter__(self): 
     self.old_level = self.log4j.LogManager.getRootLogger().getLevel() 
self.log4j.LogManager.getRootLogger().setLevel(self.log4j.Level.FATAL) 
Problemi correlati