我在一个集群中工作,我没有权限更改文件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)