如何在不更改log4j.properties的情况下关闭PySpark日志中的INFO



我在一个集群中工作,我没有权限更改文件log4j。属性在使用pyspark时停止信息日志记录(如第一个答案所述)。上面问题的第一个答案中解释的解决方案适用于spark-shell (scala)

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

但是对于spark with python(即pyspark),它不起作用,也没有以下

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

如何在不更改log4j的情况下停止pyspark中info的详细打印?属性文件吗?

我使用sc.setLogLevel("ERROR")是因为我没有对我们集群的log4j的写访问权限。属性文件。来自文档:

控制我们的logLevel。这将覆盖任何用户定义的日志设置。有效的日志级别包括:ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN

这对我有帮助:

import logging
s_logger = logging.getLogger('py4j.java_gateway')
s_logger.setLevel(logging.ERROR)
spark_context = SparkContext()   

from 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 )

对我很管用。这基本上是在PySpark自己的测试中完成的:

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)

相关内容

最新更新